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.
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.
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.
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.
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.
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.
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
Dinamakan konstruktor. Anda dapat memberikan nama konstruktor, yang benar-benar membantu dengan kesesuaian. Sebagai contoh:var duck = new Duck.fromJson(someJsonString)
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.
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.
Dart mengkompilasi ke JavaScript. Ini sangat penting, karena JavaScript adalah lingua franca web. Aplikasi dart harus dijalankan di web modern.
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.
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.
Interpolasi string. Ini hanya fitur yang bagus, membuatnya mudah untuk membuat string:var msg = "Hello $friend!";
noSuchMethod Dart adalah bahasa yang dinamis, dan Anda dapat menangani panggilan metode sewenang-wenang dengan noSuchMethod()
.
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.
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! :)