Danke für deine Frage! Voller Haftungsausschluss, ich arbeite im Dart-Team.
Der wahrscheinlich beste Vorteil, den Dart heute hat, ist, dass er C # -, Java-, C ++ - und den meisten JavaScript-Entwicklern vertraut ist. Viele Entwickler haben eine Reihe von Erwartungen an ihre Sprache (klassenbasiertes OO, lexikalischer Bereich, vertraute Syntax) und ihre Tools (Code-Vervollständigung, Refactoring, Code-Navigation, Debugging), die Dart erfüllen und übertreffen möchte.
Optionale statische Typen. Wenn ich Prototypen erstelle oder nur kleine Skripte schreibe, verwende ich nicht viele statische Typen. Ich brauche sie einfach nicht und ich möchte mich nicht mit der Zeremonie festsetzen. Einige dieser Skripte entwickeln sich jedoch zu größeren Programmen. Da die Skripte skaliert werden, möchte ich eher Klassen und statische Typanmerkungen.
Unschuldig bis zum Beweis der Schuld. Dart ist bemüht, die Situationen zu minimieren, die zu einem Fehler beim Kompilieren führen. Viele Bedingungen in Dart sind Warnungen, die Ihr Programm nicht daran hindern, ausgeführt zu werden. Warum? Im Einklang mit der Mode der Webentwicklung ist es unerlässlich, den Entwicklern die Möglichkeit zu geben, ein wenig Code auszuprobieren, erneut zu laden und zu sehen, was passiert. Der Entwickler sollte nicht erst nachweisen müssen, dass das gesamte Programm korrekt ist, bevor er nur eine Ecke des Codes testet.
Lexikalischer Umfang. Das ist großartig, wenn Sie nicht daran gewöhnt sind. Einfach ausgedrückt, wird die Sichtbarkeit von Variablen und sogar diese durch die Programmstruktur definiert. Dies eliminiert eine Klasse von Rätseln in der traditionellen Webprogrammierung. Es ist nicht erforderlich, Funktionen neu zu binden, um dies an das zu halten , was Sie denken oder erwarten.
Echte Klassen, die in die Sprache eingebrannt sind. Es ist klar, dass die meisten Entwickler in Klassen arbeiten möchten, da die meisten Webentwicklungs-Frameworks eine Lösung bieten. Eine "Klasse" aus Framework A ist jedoch in der herkömmlichen Webentwicklung nicht mit Framework B kompatibel. Dart verwendet natürlich Klassen.
Funktionen auf oberster Ebene. Ein schmerzlicher Teil von Java ist, dass alles in eine Klasse eingeteilt werden muss. Dies ist etwas künstlich, insbesondere wenn Sie einige Dienstprogrammfunktionen definieren möchten. In Dart können Sie Funktionen auf oberster Ebene außerhalb jeder Klasse definieren. Dadurch fühlt sich die Bibliothekszusammensetzung natürlicher an.
Klassen haben implizite Schnittstellen. Der Wegfall expliziter Schnittstellen vereinfacht die Sprache. IDuck muss nicht mehr überall definiert werden. Jetzt brauchen Sie nur noch eine Klasse Duck. Da jede Klasse eine implizite Schnittstelle hat, können Sie eine erstellenMockDuck implements Duck
Benannte Konstruktoren. Sie können Konstruktornamen vergeben, was die Lesbarkeit erheblich verbessert. Beispielsweise:var duck = new Duck.fromJson(someJsonString)
Fabrikbauer. Das Fabrikmuster ist ziemlich verbreitet und es ist schön zu sehen, dass es in die Sprache eingebrannt ist. Ein Factory-Konstruktor kann einen Singleton, ein Objekt aus einem Cache oder ein Objekt eines Untertyps zurückgeben.
Isolate. Vorbei sind die Zeiten, in denen sich Threads den veränderlichen Status teilen (eine fehleranfällige Technik). Ein Dart-Isolat ist ein isolierter Speicherheap, der in einem separaten Prozess oder Thread ausgeführt werden kann. Isolate kommunizieren, indem sie Nachrichten über Ports senden. Isolate arbeiten in der Dart VM und können in HTML5-Apps für Web-Worker kompiliert werden.
Dart kompiliert zu JavaScript. Dies ist von entscheidender Bedeutung, da JavaScript die Verkehrssprache des Webs ist. Dart-Apps sollten im modernen Web laufen.
Starkes Werkzeug. Das Dart-Projekt enthält auch einen Editor. Hier finden Sie Code-Vervollständigung, Refactoring, Schnellkorrekturen, Code-Navigation, Debugging und mehr. Außerdem hat IntelliJ ein Dart-Plugin.
Bibliotheken. Sie können Dart-Code in Bibliotheken organisieren, um den Namensraum und die Wiederverwendbarkeit zu vereinfachen. Ihr Code kann eine Bibliothek importieren und Bibliotheken können erneut exportiert werden.
String-Interpolation. Dies ist nur eine nette Funktion, die es einfach macht, eine Zeichenfolge zu erstellen:var msg = "Hello $friend!";
noSuchMethod Dart ist eine dynamische Sprache, mit der Sie beliebige Methodenaufrufe bearbeiten können noSuchMethod()
.
Generika. Wenn Sie "Dies ist eine Liste von Äpfeln" sagen können, erhalten Ihre Werkzeuge viel mehr Informationen, um Ihnen zu helfen und mögliche Fehler frühzeitig zu erkennen. Zum Glück sind Darts Generika einfacher als das, was Sie wahrscheinlich gewohnt sind.
Bedienerüberladung. Dartklassen können Verhalten für Operatoren wie +
oder definieren -
. Zum Beispiel könnten Sie Code wie schreiben new Point(1,1) + new Point(2,2)
.
Abgesehen davon gibt es noch viel mehr JavaScript-Bibliotheken.
Persönlich glaube ich, dass im Web Platz für viele Sprachen ist. Wenn die App fantastisch ist und in den meisten modernen Browsern ausgeführt wird, ist es mir egal, in welcher Sprache sie geschrieben ist. Solange Sie, der Entwickler, glücklich sind, produktiv arbeiten und im Web starten, ist das alles Worauf es ankommt! :)