[GO] Warum ich von Java zu Dart gewechselt bin


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.

App.java ⇒ app.dart.png

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.

  1. Dart SDK Wenn Sie viel Erfahrung mit dem Schreiben von Code in Java haben, ist der frustrierendste Teil wahrscheinlich die Standardbibliothek. Die Schlüsselentscheidung wurde vor langer Zeit getroffen und kann nicht mehr zurückgewiesen werden. Java Iterable und Dart [Iterable](https :: //api.dartlang.org/stable/1.21.0/dart-core/Iterable-class.html Nur durch Vergleichen von "Iterable class --dart: core library --Dart API"), wie viel Fortschritt die Welt gemacht hat Ich verstehe.

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)

Auf DartPad ausführen

2. Rückruf, Zukunft, asynchron / warten

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();
}

Auf DartPad ausführen

3. Kein Unsinn, keine Kesselplatte

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.

4. Weiter vorwärts

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.

5. Web-Eignung

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.


Suche nach Wertinvarianz

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".

Nachtrag

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

Warum ich von Java zu Dart gewechselt bin
[Python] Poesie Ich habe angefangen & Eindruck, dass ich von Pipenv zu Poesie gewechselt bin
Ich möchte ein Glas aus Python verwenden
Verwenden Sie Python aus Java mit Jython. Ich war auch süchtig danach.
Ich möchte aus verschiedenen Sprachen eine Verbindung zu PostgreSQL herstellen
Ich möchte mit Python eine E-Mail von Google Mail senden.
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 1/3
Summe von 1 bis 10
Ich möchte Passungen aus meinem Kopf machen
Ich möchte Ceres Solver aus Python verwenden
Was ich beim Update von Python 2.6 auf 2.7 gemacht habe
[Python] Ich möchte 7DaysToDie von Discord aus verwalten! 2/3
Ich möchte C ++ - Code aus Python-Code erstellen!
Eine einfache Möglichkeit, Java von Python aus aufzurufen
Ich möchte den Dateinamen von DataLoader sehen
Ich möchte Bilder von Katzen von Instagram erkennen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich habe versucht, Dropout zu erklären
Photogrammetrie von OpenCV aus gesehen. (Warum Säulen dazu neigen, zu verschwinden)
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Ich fing an zu analysieren
Ich habe versucht zu debuggen.
Von der Bearbeitung bis zur Ausführung
Warum ich mich für Python entschieden habe
Ich habe versucht, Zeichen aus Untertiteln zu extrahieren (OpenCV: tesseract-ocr edition)
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
[Von Zeit zu Zeit aktualisiert] Zusammenfassung der Entwurfsmuster in Java
Ich möchte viele Prozesse von Python aus starten
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Ich möchte die zulässige Ausfallzeit aus der Betriebsrate berechnen
Ich möchte das Paket aus den Anforderungen.txt mit Poesie installieren
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, Perceptron Teil 1 [Deep Learning von Grund auf neu] zu implementieren.
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich habe versucht, mit pypyodbc schnell Daten von AS / 400 abzurufen