Apakah Dart memiliki fitur yang berguna untuk pemrogram web?

33

http://www.dartlang.org/

Saya telah memeriksa situs tersebut dengan sangat singkat, dan merasa penasaran. Apakah ada keuntungan menggunakan Dart? Apakah itu hanya pengganti JavaScript?

Sepertinya Java sederhana. Menulis cukup banyak C # di tempat kerja, bahasanya terasa seperti apa yang saya gunakan, jadi mempelajari sintaksisnya seperti angin untuk dipelajari. Adakah yang punya pendapat atau pengalaman dengan bahasa tersebut?

(Dibandingkan dengan CoffeeScript (= Saya tidak melakukan sintaksis Ruby) sintaksanya terlihat lebih akrab bagi saya).

marko
sumber
18
Komentar Doug Crockford lucu: "Jadi, saya sudah berpikir lama ... jika saya bisa mengambil selembar kertas bersih dan menulis bahasa baru yang mempertahankan semua kebaikan Javascript ... Saya tidak akan muncul dengan sesuatu seperti Dart. "
MebAlone
2
@ McAlone Ho-ho-ho, betapa wawasannya. Betapa mengguncangnya Crockford. Cakram atas kebijaksanaan.
funkybro
11
@MebAlone Perancang bahasa Dart tidak berusaha membuat bahasa baru yang mempertahankan semua kebaikan JavaScript. Mereka mencoba untuk membuat bahasa bahasa berbasis objek, berorientasi kelas untuk browser.
MarkJ
1
Apa Is there any advantages of using Dart?artinya Keuntungan lebih dari apa dan diukur caranya ? Ada sejumlah bahasa yang dikompilasi ke JavaScript. Sebagian besar dari mereka melakukan sesuatu yang jauh lebih baik daripada Dart. Beberapa melakukan banyak hal lebih baik daripada Dart. Dan misalnya, jika Anda melakukan C #, maka ScriptSharp mungkin menarik untuk Anda. Meskipun di antara semua bahasa yang dikompilasi dengan JavaScript, ini masih jauh dari pilihan pertama saya, karena bagi Anda itu akan menghadirkan transisi yang sangat mudah, bahkan mungkin memungkinkan untuk mem-porting kode yang ada tanpa kesulitan.
back2dos
1
@ McAlone Douglas sedikit konflik. Mengeluh pengembang tidak menerima ide-ide baru tetapi mengatakan panah itu buruk pada 2012 ketika baru saja dirilis 2 hari yang lalu. Mereka mengumumkan akan datang 2 tahun yang lalu. Seperti alamat panah beberapa hal Douglas tidak senang dengan di JS (tidak ada fungsi konstruktor dengan "longgar menggantung" prototipe). Sambil menjaga hal-hal yang dia suka (seperti penutupan). Dalam beberapa presentasi saya pernah melihatnya memuji prototipe, lalu mengkritik sintaks fungsi konstruktor (dia benar). Kemudian "memecahkan" itu menunjukkan pola modul yang sepenuhnya mengabaikan keberadaan prototipe.
HMR

Jawaban:

65

Terima kasih atas pertanyaan anda! Penafian penuh, saya bekerja di tim Dart.

Mungkin keuntungan terbaik yang dimiliki Dart saat ini adalah bahwa hal itu familiar bagi C #, Java, C ++, dan sebagian besar pengembang JavaScript. Banyak pengembang memiliki seperangkat harapan di sekitar bahasa mereka (OO berbasis kelas, ruang lingkup leksikal, sintaksis akrab) dan alat-alat mereka (penyelesaian kode, refactoring, navigasi kode, debugging) yang bertujuan untuk dipenuhi dan dilampaui oleh Dart.

Inilah beberapa hal yang saya sukai dari bahasa ini:

  1. Jenis statis opsional. Ketika saya membuat prototipe atau hanya menulis skrip kecil, saya tidak menggunakan banyak tipe statis. Aku hanya tidak membutuhkannya, dan aku tidak ingin terjebak dengan upacara. Namun, beberapa skrip tersebut berkembang menjadi program yang lebih besar. Sebagai skala skrip, saya cenderung ingin kelas dan anotasi tipe statis.

  2. Tidak bersalah sampai terbukti bersalah. Dart berusaha keras untuk meminimalkan situasi yang mengakibatkan kesalahan waktu kompilasi. Banyak kondisi di Dart adalah peringatan, yang tidak menghentikan program Anda dari berjalan. Mengapa? Sesuai dengan mode pengembangan web, sangat penting untuk memungkinkan pengembang untuk mencoba sedikit kode, tekan reload, dan lihat apa yang terjadi. Pengembang tidak harus terlebih dahulu membuktikan seluruh program benar sebelum hanya menguji sudut kode.

  3. Lingkup leksikal. Ini luar biasa, jika Anda tidak terbiasa. Sederhananya, visibilitas variabel, dan bahkan ini , ditentukan oleh struktur program. Ini menghilangkan kelas teka-teki dalam pemrograman web tradisional. Tidak perlu lagi mengikat fungsi untuk menjaga ini sesuai dengan apa yang Anda pikirkan atau harapkan.

  4. Kelas nyata dimasukkan ke dalam bahasa. Jelas sebagian besar pengembang ingin bekerja di kelas, karena sebagian besar kerangka kerja pengembangan web menawarkan solusi. Namun, "kelas" dari kerangka A tidak kompatibel dengan kerangka B, dalam pengembangan web tradisional. Dart menggunakan kelas secara alami.

  5. Fungsi tingkat atas. Salah satu bagian yang menyakitkan dari Jawa adalah bahwa segala sesuatu harus dimasukkan ke dalam kelas. Ini agak artifisial, terutama ketika Anda ingin mendefinisikan beberapa fungsi utilitas. Di Dart, Anda dapat menentukan fungsi di tingkat atas, di luar kelas apa pun. Ini membuat komposisi perpustakaan terasa lebih alami.

  6. Kelas memiliki antarmuka implisit. Penghapusan antarmuka eksplisit menyederhanakan bahasa. Tidak perlu lagi mendefinisikan IDuck di mana-mana, yang Anda butuhkan sekarang adalah kelas Bebek. Karena setiap kelas memiliki antarmuka implisit, Anda dapat membuatMockDuck implements Duck

  7. Dinamakan konstruktor. Anda dapat memberikan nama konstruktor, yang benar-benar membantu dengan kesesuaian. Sebagai contoh:var duck = new Duck.fromJson(someJsonString)

  8. Konstruktor pabrik. Pola pabrik cukup umum, dan senang melihat ini dimasukkan ke dalam bahasa. Konstruktor pabrik dapat mengembalikan singleton, objek dari cache, atau objek dari sub-tipe.

  9. Terisolasi. Lewatlah sudah hari-hari berbagi keadaan bisa berubah di antara utas (teknik rawan kesalahan). Isolat Dart adalah tumpukan memori yang terisolasi, dapat dijalankan dalam proses atau utas terpisah. Isolat berkomunikasi dengan mengirim pesan melalui porta. Isolat berfungsi di Dart VM dan dapat dikompilasi ke pekerja Web di aplikasi HTML5.

  10. Dart mengkompilasi ke JavaScript. Ini sangat penting, karena JavaScript adalah lingua franca web. Aplikasi dart harus dijalankan di web modern.

  11. Perkakas yang kuat. Proyek Dart juga mengirimkan editor. Anda akan menemukan penyelesaian kode, refactoring, perbaikan cepat, navigasi kode, debugging, dan banyak lagi. IntelliJ juga memiliki plugin Dart.

  12. Perpustakaan. Anda dapat mengatur kode Dart ke dalam pustaka, untuk penempatan nama yang lebih mudah dan penggunaan kembali. Kode Anda dapat mengimpor perpustakaan, dan perpustakaan dapat mengekspor kembali.

  13. Interpolasi string. Ini hanya fitur yang bagus, membuatnya mudah untuk membuat string:var msg = "Hello $friend!";

  14. noSuchMethod Dart adalah bahasa yang dinamis, dan Anda dapat menangani panggilan metode sewenang-wenang dengan noSuchMethod().

  15. Generik. Mampu mengatakan "ini adalah daftar apel" memberikan alat Anda lebih banyak info untuk membantu Anda dan menangkap potensi kesalahan lebih awal. Untungnya, generik Dart lebih sederhana dari apa yang mungkin Anda terbiasa.

  16. Kelebihan operator. Kelas Dart dapat mendefinisikan perilaku untuk operator seperti +atau -. Misalnya, Anda dapat menulis kode seperti new Point(1,1) + new Point(2,2).

Setelah mengatakan semua itu, ada lebih banyak perpustakaan JavaScript di luar sana.

Secara pribadi, saya percaya ada banyak ruang di web untuk banyak bahasa. Jika aplikasinya luar biasa, dan itu berjalan di sebagian besar peramban modern, saya tidak terlalu peduli dengan bahasa apa yang digunakan. Selama Anda, pengembang, senang, produktif, dan meluncurkan di web, itu Apa masalahnya! :)

Seth Ladd
sumber
Banyak bahasa pemrograman modern (Ruby, Scala, Python) termasuk beberapa jenis mekanisme pewarisan berganda, dan ini datang dalam JDK8. Apakah ini direncanakan untuk Dart?
MebAlone
4
+1 pada poin # 1 - pengetikan dinamis cukup memadai untuk skrip kecil (yaitu "validasi formulir" -level). Apa pun lebih dari itu dan saya menemukan jaring pengaman dari pengetikan statis sangat diperlukan.
funkybro
2
@ McAlone Saya berharap kita akan melihat mixins datang ke Dart dalam waktu dekat.
Seth Ladd
Terkejut Snap-shotting tidak disebutkan - IMO salah satu fitur terbaik Dart.
mythz
@mythz Saya tidak menyebutkan snapshot karena belum diimplementasikan sepenuhnya. Tapi ya, mereka keren!
Seth Ladd
11

Menulis cukup banyak C # di tempat kerja, bahasanya terasa seperti apa yang saya terbiasa

Itu satu poin tentang Dart. Javascript dianggap sebagai bahasa yang aneh dengan beberapa idiom umum. Dalam bahasa seperti Jawa seringkali ada cara alami untuk mendekati masalah. Misalnya jika Anda menyimpan inventaris tabel, di Java atau C # Anda akan membuat Tabel kelas.

Javascript tidak memiliki kelas, Anda mungkin ingin menggunakan prototipe tetapi mereka merasa canggung dan tidak menyediakan struktur dan alat enkapsulasi yang kuat. (Setidaknya bukan tanpa membuat aksi.) Warisan, komposisi dll canggung dengan prototipe Javascript. Itu sebabnya kebanyakan orang menggunakan peta hash biasa untuk menyimpan data. Atau mereka menggunakan lib pihak ke-3 seperti prototipe yang memberi Anda pengalaman seperti kelas.

Jadi kenyamanan adalah satu hal, susun yang lain. Javascript tidak skalakan dengan baik karena tidak ada cara standar untuk menyusun aplikasi skala besar. Namun saat ini lib pihak ke-3 menjadi sangat populer. (Seperti backbone.js)

Dart adalah sesuatu untuk menyelesaikannya. Itu ada di sana untuk memberi Anda kenyamanan struktural Jawa dan terlebih lagi ia tidak memiliki semua fitur JS yang canggung ini. (Sebagian besar dari mereka terkait dengan pengetikan yang lemah.)

Jadi jawabannya adalah ya: kelas, warisan, ...: "OOP tradisional". (Sebagian besar webworld JS appapps di luar sana menggunakan callback berbasis jQuery didekati sebagai struktur utama.) Dan itu memiliki bentuk longgar statis mengetik, namun itu bukan titik penjualan utama.

BTW: Anda mungkin ingin membaca mailing Google "internal" ini bertanggal 2010: Future of Javascript

Javascript memiliki kelemahan mendasar yang tidak dapat diperbaiki hanya dengan mengembangkan bahasa. Kami akan mengadopsi strategi dua sisi untuk masa depan Javascript ... Mengembangkan bahasa baru (disebut Dash) yang bertujuan untuk mempertahankan sifat dinamis Javascript tetapi memiliki profil kinerja yang lebih baik dan dapat menerima tooling untuk proyek-proyek besar .. .

Philip
sumber
5
Tidak semua orang menganggap Javascript "bahasa yang aneh". Seringkali ada cara alami untuk mendekati masalah. Terlalu sering membutuhkan teknik (pemrograman fungsional, overloading operator, mixin, pemrograman generik) yang tidak didukung oleh Java. Warisan, komposisi, dll. Tidak canggung dengan prototipe Javascript. Hanya berbeda dari Java dan C #, tetapi mirip dengan Ruby, LUA, dan Perl.
kevin cline
1
Mmm ... pertama kali saya mendengar sesuatu yang bagus tentang prototipe. Tetapi bagaimana Anda melihat prototipe JS mirip dengan Ruby?
Philip
1
Anda perlu keluar (dari dunia Jawa) lebih sering. Lihatlah metaprogramming Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) dan Anda akan melihat bahwa resolusi nama anggota Ruby mirip dengan (tetapi IMO lebih rumit daripada) resolusi nama anggota Javascript.
kevin cline
jQuery sama sekali tidak berbentuk atau bentuk mempromosikan pendekatan panggilan balik lebih dari DOM API (yang pada dasarnya membungkus) atau inti JS itu sendiri atau Dart akan lakukan. Prototipe adalah mekanisme pewarisan yang memungkinkan kita melakukan hal-hal yang tidak dapat dilakukan kelas. Bandingkan kelas dengan fungsi konstruktor, yang merangkum vars instance internal dengan baik, bukan prototipe. Bukan berarti median tingkat talenta Anda / spam pengambil-setter Java atau C # dev memiliki gagasan sekecil apa enkapsulasi yang baik untuk atau rata-rata Google dev memiliki ide sekecil apa pun tentang cara menulis JavaScript.
Erik Reppen
@ErikReppen: jika Anda menggunakan jQuery khusus untuk manipulasi DOM, Anda dapat menulis kode yang hampir tidak memerlukan panggilan balik, jika Anda menggabungkannya dengan kerangka kerja lain seperti backbone.js. Mengikat acara dengan jQuery sangat mempromosikan panggilan balik (anonim). backbone.js memiliki IMHO pendekatan yang lebih terstruktur.
Philip
5

Bagi saya, ini memberi saya kesempatan untuk menyusun kode saya lebih baik daripada JavaScript dengan ruang lingkup dan kelas.

Ini mirip dengan Java dan JavaScript dan dengan editor Dart, saya hampir tidak memiliki adaptasi. Saya mulai mengkode langsung.

var ws = new [Moz]WebSocketharus memenuhi browser yang berbeda itu menjengkelkan. Dart mengkompilasi ke kode JavaScript yang kompatibel dengan browser populer.

Tantangan saya terutama adalah berinteraksi dengan kode JavaScript. Saya entah bagaimana menemukan jalan keluar tetapi akan lebih baik jika itu adalah bagian dari Dart.

Abiola
sumber
Setuju, @Abiola, Dart membutuhkan interop JavaScript yang lebih baik. Ini sangat di radar, saya menantikan untuk apa tim datang dengan.
Seth Ladd
0

Pendekatan Java / C # pasti bias dalam mengetuk JS sejak awal web 2.0 Itu karena diferensiasi buatan (atau sangat nyata & perlu) antara bahasa sisi klien dan bahasa sisi server. Saya rasa ini adalah bahasa sisi-server agar tetap dalam 'kontrol' domain inti masalah aplikasi web dan untuk membatasi kode yang kurang serius (kode ui) dari kode bisnis (sisi server). Java juga saya pikir suka tetap menjadi kernel sisi-server karena kehilangan perang GUI dengan applet yang sebagian besar disebabkan oleh Flash dan HTML 5. Sekarang Anda memiliki RedTamarin sebuah proyek AS3 NodeJS-esque yang mengacu pada masa depan campuran yang pluralistik dari paradigma front dan backend terpadu. .

Vodbro
sumber