Jemand hat gehört, dass von JavaScript zu Dart migriert Ich bin. Nun, meine Reise ist etwas anders. Ich bin von Java zu Dart gewechselt. Und ein Teil von adwords.google.com.
AdWords ist das Zentrum der Einnahmen von Google und wird jetzt mit Dart umgeschrieben. 2016/03 / the-new-adwords-ui-used-dart-we-ask.html "Dart News & Updates: Die neue AdWords-Benutzeroberfläche verwendet Dart - wir haben gefragt, warum"). Der Teil von AdWords, für den ich arbeite (der Teil, der überspringbare YouTube-Anzeigen verkauft), läuft jedoch bereits seit 2014 auf Dart.
Das Interessante ist, dass unser Team nicht angewiesen oder sogar gebeten wurde, Dart zu verwenden. Wir fanden Darts Fähigkeiten und entschieden, dass es sich lohnt, es zu versuchen.
Wichtig ist, dass wir den Garapon nicht wieder aufgebaut haben. Früher habe ich Java / GWT verwendet, aber als ich zu Dart migrierte, konnte ich mich schrittweise in Dart im Browser integrieren. Er wurde mit Dart vertraut und begeisterte sich für Dart, als er aufwuchs. Schließlich schrieb er fast jeden Browsercode von Java / GWT nach Dart um.
Dies ist der Hauptgrund, warum Dart besser ist als Java.
Der beste Weg, um in Java zu programmieren, ist die Verwendung einer Bibliothek eines Drittanbieters. Google verwendet Guava und es ist ziemlich cool. Guava verfügt beispielsweise über FluentIterable. Trotzdem ist es nicht Teil des SDK und immer noch ein Bürger zweiter Klasse.
Dart hatte die Gelegenheit, von vorne zu beginnen und es in die Praxis umzusetzen. Hier ist ein Beispiel, in dem Sie Fluent Iterable in Java verwenden würden.
print(
[1, 2, 3].where((x) => x.isOdd).map((x) => x + 10));
-->
(11, 13)
Wenn Sie viel Erfahrung mit dem Schreiben von Code in Java / GWT haben, reagieren Sie möglicherweise unwissentlich auf das Wort "Rückruf". Sie sollten nur durch das Hören der Wörter schwitzen.
Ich persönlich schreibe und pflege einen erschreckenden und schrecklichen Code, der eine Liste von Rückruf-Rückrufen ist, um verschiedene Ereignisse in einer Kette von RPCs zu behandeln.
Dies ist ein relativ gutes Beispiel.
public void getFoo(AsyncCallback<List<String>> callback) {
getThenFilter("foo", callback);
}
private void getThenFilter(
final String parameter,
final AsyncCallback<String> callback) {
makeRequest(new AsyncCallback<List<String>>() {
void handle(List<String> values) {
List<String> filtered = new ArrayList<>();
for (String value : values) {
if (value.startsWith(parameter)) {
filtered.add(value);
}
}
callback.handle(filtered);
}
}
Dart hat Future Die Standardbibliothek ist entworfen und alles ist gelöst. Es war der Moment, in dem Dart mit mir sprach. Sie erhalten genau das, was Sie für ein besseres Codierungsleben benötigen.
Future<List<String>> getFoo() {
return _getThenFilter('foo');
}
Future<List<String>> _getThenFilter(String parameter) {
return makeRequest().then((result) =>
result.where((string) => string.startsWith(parameter))
.toList());
}
Es hört hier nicht auf. Das Dart-Team diskutierte eine modische Möglichkeit, das Schlüsselwort Future async / await zu verwenden. Schreiben Sie einfach "warten" und Sie können mit der asynchronen Codierung fortfahren, als ob sie synchron wäre, und alles scheint hinter den Kulissen gehandhabt zu werden.
Und es wurde Realität. Als langjähriger Java-Entwickler war es der Moment, in dem ich anfing zu denken, dass bloße hypothetische Diskussionen über Sprachänderungen für meine Arbeit keinen Nutzen hatten. Es war eine Freude.
Future<List<String>> getFoo() {
return _getThenFilter('foo');
}
Future<List<String>> _getThenFilter(String parameter) async {
var unfiltered = await makeRequest();
return unfiltered.where(
(string) => string.startsWith(parameter)).toList();
}
Wenn Sie von Java zu Dart wechseln, werden Sie auf so viele Funktionen stoßen, die Ihnen das Codieren erleichtern.
Sogar man bringt Java-Programmierer zum Lächeln. Ich kann nicht alles auf einmal gut aushalten.
Darts Entwicklung hört nicht bei asynchron / warten auf. Kürzlich unterstützte Generic Method Syntax Hat. Versuche vom Typ Nicht-Null sind ebenfalls im Gange. Das Typsystem wird im Strong Mode überarbeitet. ..
Dart wird sich gründlich zu einer praktischen Anwendung entwickeln. Alle Funktionen sind erforderlich, um im praktischen Code bequem arbeiten zu können. Es werden also weiterhin neue Funktionen angezeigt, nur gute.
Schließlich hat Dart ein Web-UI-Framework. Tatsächlich haben wir mit Web UI begonnen, als Angular Dart keinen Schatten oder keine Form hatte. Danach habe ich Angular Dart verwendet und jetzt ist es Angular Dart 2. Allen gemeinsam ist eine leichte, HTML-ähnliche Vorlage.
Das einzige, was meiner Meinung nach Dart aus meiner Sicht fehlt, ist eine ordnungsgemäße unveränderliche Sammlung und unveränderliche Unterstützung. In der Hoffnung, dass jemand ein Paket schreiben würde, das verwendet werden könnte, eilten wir zu etwas, das für unser Team funktionierte.
Aber am Ende habe ich viel Zeit damit verbracht, etwas zu entwickeln, das Open Source Publishing standhält. built_collection Und built_value .dart "google / built_value.dart: Unveränderliche Werttypen, Aufzählungsklassen und Serialisierung.") Wird geboren.
das ist alles. Dart ist bereit für einen Auftritt zur Hauptsendezeit. Sie können mit Dart riesige, geschäftskritische Webanwendungen erstellen, wie wir es mit AdWrod for Video getan haben. Oder Sie können mit [Flutter] mobile Apps für Android und iOS entwickeln (https://flutter.io/ "Willkommen bei Flutter! --Flutter"). Wie in einem kürzlich von mir geschriebenen Artikel beschrieben, funktioniert serverseitiger Dart [sehr gut] mit clientseitigem Dart (https://hackernoon.com/end-to-end-testing-in-one- kurze Sekunde mit Pfeil-e699c8146fd6 # .7vxjkync3 "Ende-zu-Ende-Test in einer kurzen Sekunde mit Pfeil")
Über meine persönliche Geschichte: Kurz nachdem ich auf dem Dart Developer Summit aufgetreten war, trat ich dem Dart-Team bei. Mit anderen Worten, als Ergebnis bin ich selbst "nach Dart gewandert".
Ein paar Anmerkungen zu Reaktion auf diesen Artikel über Reddit ..
Als Drittanbieter-Bibliothek, die das SDK ergänzt, war Fluent Iterable, dessen Stream in Java 8 fast die gleiche Funktionalität bietet, kein besonders gutes Beispiel. Das nächste Beispiel für einen SDK-Vergleich ist das Lesen von Dateien. In Dart können Sie einfach "Neue Datei (" foo.txt "). ReadAsStringSync ()" schreiben. Wenn Sie keine synchrone Verarbeitung durchführen möchten, können Sie "Neue Datei warten" ("foo.txt") schreiben. ReadAsString () ". In Java müssen Sie immer nach der neuesten korrekten Schrift suchen.
Es ist leicht, ein anderes Beispiel zu nennen, aber das ist nicht überraschend. In der langen Zeit, in der objektorientierte Sprachen entwickelt wurden, wurde das SDK von Dart lange nach dem API-Design von Java erstellt.
Ich möchte betonen, dass es in diesem Artikel um das Kompilieren von Dart in JS für Browser geht. Die Migration, die ich gemacht habe, ist von Java / GWT nach Dart.
Abschließend möchte ich erwähnen, dass Java unter den vielen Sprachen, mit denen ich gearbeitet habe, immer noch meine zweite Lieblingssprache ist.
Recommended Posts