Grazie per la tua domanda! Disclaimer completo, lavoro nel team Dart.
Probabilmente il miglior vantaggio che Dart ha oggi è che ha familiarità con gli sviluppatori C #, Java, C ++ e la maggior parte degli sviluppatori JavaScript. Molti sviluppatori hanno una serie di aspettative intorno al loro linguaggio (OO basato sulla classe, ambito lessicale, sintassi familiare) e ai loro strumenti (completamento del codice, refactoring, navigazione del codice, debug) che Dart mira a soddisfare e superare.
Tipi statici opzionali. Quando sto prototipando o semplicemente scrivendo piccoli script, non uso un sacco di tipi statici. Semplicemente non ne ho bisogno e non voglio impantanarmi con la cerimonia. Tuttavia, alcuni di questi script si evolvono in programmi più grandi. Mentre gli script si ridimensionano, tendo a desiderare classi e annotazioni di tipo statico.
Innocente fino a prova contraria. Dart si sforza di ridurre al minimo le situazioni che provocano un errore di compilazione. Molte condizioni in Dart sono avvisi, che non impediscono l'esecuzione del programma. Perché? In linea con la moda dello sviluppo web, è indispensabile consentire agli sviluppatori di provare un po 'di codice, premere Ricarica e vedere cosa succede. Lo sviluppatore non dovrebbe prima provare che l'intero programma è corretto prima di provare un angolo del codice.
Ambito lessicale. È fantastico, se non ci sei abituato. In poche parole, la visibilità delle variabili e anche questo è definita dalla struttura del programma. Ciò elimina una classe di enigmi nella programmazione web tradizionale. Non c'è bisogno di funzioni di ri-legano a mantenere questo a ciò che si pensa o si aspettano.
Classi reali cotte nella lingua. È chiaro che la maggior parte degli sviluppatori vuole lavorare in classe, poiché la maggior parte dei framework di sviluppo web offre una soluzione. Tuttavia, una "classe" dal framework A non è compatibile con il framework B, nello sviluppo web tradizionale. Il dardo usa le classi in modo naturale.
Funzioni di alto livello. Una parte dolorosa di Java è che tutto deve essere inserito in una classe. Questo è un po 'artificiale, soprattutto quando si desidera definire alcune funzioni di utilità. In Dart, puoi definire le funzioni al livello più alto, al di fuori di qualsiasi classe. Questo rende la composizione della libreria più naturale.
Le classi hanno interfacce implicite. L'eliminazione di interfacce esplicite semplifica il linguaggio. Non è più necessario definire IDuck ovunque, tutto ciò di cui hai bisogno ora è una classe Duck. Poiché ogni classe ha un'interfaccia implicita, puoi crearne unaMockDuck implements Duck
Costruttori nominati. Puoi dare nomi ai costruttori, il che aiuta davvero con la leggibilità. Per esempio:var duck = new Duck.fromJson(someJsonString)
Costruttori di fabbrica. Il modello di fabbrica è abbastanza comune ed è bello vederlo cotto nella lingua. Un costruttore di fabbrica può restituire un singleton, un oggetto da una cache o un oggetto di un sottotipo.
Gli isolati. Sono finiti i giorni della condivisione dello stato mutevole tra i thread (una tecnica soggetta a errori). Un isolato Dart è un heap di memoria isolato, in grado di essere eseguito in un processo o thread separato. Gli isolati comunicano inviando messaggi tramite le porte. Isola il lavoro nella VM Dart e può essere compilato per i lavoratori Web nelle app HTML5.
Dart si compila in JavaScript. Ciò è di fondamentale importanza, poiché JavaScript è la lingua franca del web. Le app Dart dovrebbero essere eseguite sul Web moderno.
Strumenti forti. Il progetto Dart spedisce anche un editore. Troverai completamento del codice, refactoring, soluzioni rapide, navigazione del codice, debug e molto altro. Inoltre, IntelliJ ha un plugin Dart.
Biblioteche. È possibile organizzare il codice Dart in librerie, per semplificare la spaziatura dei nomi e la riusabilità. Il codice può importare una libreria e le librerie possono riesportare.
Interpolazione di stringhe. Questa è solo una bella funzionalità, che semplifica la composizione di una stringa:var msg = "Hello $friend!";
noSuchMethod Dart è un linguaggio dinamico e puoi gestire chiamate di metodo arbitrarie con noSuchMethod()
.
Generics. Essere in grado di dire "questo è un elenco di mele" fornisce ai tuoi strumenti molte più informazioni per aiutarti e individuare tempestivamente potenziali errori. Fortunatamente, però, i generici di Dart sono più semplici di quelli a cui probabilmente sei abituato.
Sovraccarico dell'operatore. Le classi di freccette possono definire comportamenti per operatori come +
o -
. Ad esempio, potresti scrivere codice come new Point(1,1) + new Point(2,2)
.
Detto questo, ci sono molte più librerie JavaScript là fuori.
Personalmente, credo che ci sia spazio sul web per molte lingue. Se l'app è fantastica e funziona nella maggior parte dei browser moderni, non mi interessa tanto la lingua in cui è scritta. Fintanto che tu, lo sviluppatore, sei felice, produttivo e lancio sul Web, questo è cosa importa! :)