Quelqu'un a entendu dire que Migré de JavaScript vers Dart Je suis. Eh bien, mon voyage est un peu différent. J'ai déménagé de Java à Dart. Et une partie de adwords.google.com.
AdWords est le centre des revenus de Google et est maintenant [Réécrit avec Dart](http://news.dartlang.org/ 2016/03 / the-new-adwords-ui-uses-dart-we-ask.html "Dart News & Updates: La nouvelle interface utilisateur AdWords utilise Dart - nous avons demandé pourquoi"). Cependant, la partie d'AdWords pour laquelle je travaille (la partie qui vend des publicités YouTube désactivables) fonctionne déjà sur Dart depuis 2014.
Ce qui est intéressant, c'est que notre équipe n'a pas été instruite ni même invitée à utiliser Dart. Nous avons découvert les capacités de Dart et avons décidé que cela valait la peine d'essayer.
L'important est que nous n'avons pas reconstruit le Garapon. J'avais l'habitude d'utiliser Java / GWT, mais lorsque j'ai migré vers Dart, j'ai pu progressivement intégrer Dart sur le navigateur. Il s'est familiarisé avec Dart et est devenu enthousiasmé par Dart en grandissant, réécrivant finalement presque tous les codes de navigateur de Java / GWT à Dart.
C'est la principale raison pour laquelle Dart est meilleur que Java.
La meilleure façon de programmer en Java est donc d'utiliser une bibliothèque tierce. Google utilise Guava et c'est plutôt cool. Par exemple, Guava a FluentIterable. Pourtant, il ne fait pas partie du SDK et est toujours un citoyen de seconde zone.
Dart a eu l'occasion de tout recommencer et de le mettre en pratique. Voici un exemple où vous utiliseriez Fluent Iterable en Java.
print(
[1, 2, 3].where((x) => x.isOdd).map((x) => x + 10));
-->
(11, 13)
Si vous avez beaucoup d'expérience dans l'écriture de code en Java / GWT, il se peut que vous réagissiez sans le savoir au mot "callback". Vous devriez transpirer simplement en entendant les mots.
Personnellement, j'écris et maintiens un code terrifiant et horrible qui est une liste de rappels pour gérer différents événements dans une série de chaînes RPC.
C'est un exemple relativement bon.
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 a Future La bibliothèque standard est conçue et tout est résolu. C'était le moment où Dart m'a parlé. Vous obtenez exactement ce dont vous avez besoin pour une meilleure vie de codage.
Future<List<String>> getFoo() {
return _getThenFilter('foo');
}
Future<List<String>> _getThenFilter(String parameter) {
return makeRequest().then((result) =>
result.where((string) => string.startsWith(parameter))
.toList());
}
Cela ne s'arrête pas là. L'équipe Dart discutait d'une manière à la mode d'utiliser le mot-clé async / await Future. Écrivez simplement «wait» et vous serez en mesure de procéder au codage asynchrone comme s'il était synchrone, et tout semble être géré dans les coulisses.
Et c'est devenu une réalité. En tant que développeur Java de longue date, c'est à ce moment-là que j'ai commencé à penser que de simples discussions hypothétiques sur le changement de langage n'étaient d'aucune utilité pour mon travail. C'était un délice.
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();
}
Lorsque vous passez de Java à Dart, vous rencontrerez tellement de fonctionnalités qui vous faciliteront la vie de codage.
--Public en standard, privé si vous commencez par "_" --Collection Literal (Try it) --Tout est un objet (pas de primitif)
Même un seul fait sourire les programmeurs Java. Je ne peux pas tout supporter en même temps, dans le bon sens.
L'évolution de Dart ne s'arrête pas à async / await. [Syntaxe de méthode générique] récemment pris en charge (http://news.dartlang.org/2016/12/dart-121-generic-method-syntax.html "Dart News & Updates: Dart 1.21: Generic Method Syntax") Fait. Des tentatives de type non nul sont également en cours. Le système de type est en cours de rénovation en Mode fort ..
Dart évoluera en profondeur vers une utilisation pratique. Toutes les fonctionnalités sont nécessaires pour fonctionner confortablement dans un code pratique. Ainsi, de nouvelles fonctionnalités continueront d'apparaître, seulement de bonnes.
Enfin, Dart dispose d'un framework d'interface utilisateur Web. En fait, nous avons commencé avec Web UI quand Angular Dart n'avait ni ombre ni forme. Après cela, j'ai utilisé Angular Dart, et maintenant c'est Angular Dart 2. Commun à tous, il existe un modèle léger de type HTML.
La seule chose que je pense que Dart manque de mon point de vue est une collection immuable appropriée et un support immuable. Donc, tout en espérant que quelqu'un écrirait un package qui pourrait être utilisé, nous nous sommes précipités vers quelque chose qui a fonctionné pour notre équipe.
Mais à la fin, j'ai passé beaucoup de temps à créer quelque chose qui pourrait résister à la publication open source. built_collection Et built_value .dart "google / built_value.dart: types de valeurs immuables, classes d'énumération et sérialisation.") Est né.
c'est tout. Dart est prêt pour une apparition aux heures de grande écoute. Vous pouvez créer d'énormes applications Web critiques avec Dart, comme nous l'avons fait avec AdWrod for Video. Ou vous pouvez commencer à développer des applications mobiles pour Android et iOS avec Flutter. De plus, comme dans un article récent que j'ai écrit, Dart côté serveur fonctionne [très bien] avec Dart côté client (https://hackernoon.com/end-to-end-testing-in-one- short-second-with-dart-e699c8146fd6 # .7vxjkync3 "Test de bout en bout en une courte seconde avec Dart")
À propos de ma propre histoire personnelle; peu de temps après avoir joué au Dart Developer Summit, j'ai rejoint l'équipe de Dart. En d'autres termes, j'ai moi-même «migré vers Dart».
Quelques notes sur Réaction à cet article sur Reddit ..
En tant que bibliothèque tierce qui complète le SDK, Fluent Iterable, où stream fournit presque les mêmes fonctionnalités dans Java 8, n'était pas un bon exemple.
Le prochain exemple de comparaison SDK qui me vient à l'esprit est la lecture de fichiers. Dans Dart, vous pouvez simplement écrire new File ('foo.txt'). ReadAsStringSync ()
, ou ʻawait new File ('foo.txt'). ReadAsString () ʻsi vous ne voulez pas faire de traitement synchrone. En Java, vous devez toujours rechercher la dernière écriture correcte.
Il est facile de donner un autre exemple, mais ce n’est pas surprenant. Dans le long chemin parcouru par les langages orientés objet, le SDK de Dart a été construit longtemps après la conception de l'API de Java.
Je tiens à souligner que cet article concerne la compilation de Dart vers JS pour les navigateurs. La migration que j'ai effectuée est de Java / GWT vers Dart.
Et enfin, je voudrais mentionner que Java est toujours ma deuxième langue préférée parmi les nombreuses langues avec lesquelles j'ai travaillé.
Recommended Posts