Dart a-t-il des fonctionnalités utiles pour les programmeurs Web?

33

http://www.dartlang.org/

J'ai consulté le site très brièvement et suis devenu curieux. Y at-il des avantages à utiliser Dart? Est-ce juste un remplacement pour JavaScript?

Cela ressemble à du Java plus simple. En écrivant beaucoup de C # au travail, la langue ressemble beaucoup à ce que je suis habitué, donc apprendre la syntaxe ressemble à un jeu d'enfant. Quelqu'un at-il des opinions ou des expériences avec la langue?

(Comparé à CoffeeScript (= je ne fais pas la syntaxe Ruby), la syntaxe me semble plus familière).

marko
la source
18
Le commentaire de Doug Crockford est amusant: "Alors, je réfléchis depuis longtemps ... si je pouvais prendre une feuille de papier vierge et écrire un nouveau langage qui conserve toutes les qualités du langage Javascript ... Je n’aurais pas pu le faire avec quelque chose comme Dart. "
MebAlone
2
@MebAlone Ho-ho-ho, quelle perspicacité. Quelle agitation que Crockford est. Wisecracks sur la sagesse.
Funkybro
11
@MebAlone Les concepteurs de langage Dart n'essayaient pas de créer un nouveau langage qui conserve toute la qualité JavaScript. Ils essayaient de trouver un langage linguistique basé sur les classes et orienté objet pour le navigateur.
MarkJ
1
Que Is there any advantages of using Dart?signifie Avantage sur quoi et comment mesuré ? Il existe toute une gamme de langages qui compilent en JavaScript. La plupart d'entre eux font beaucoup mieux que Dart. Certains font la plupart des choses mieux que Dart. Et par exemple, si vous utilisez C #, alors ScriptSharp pourrait être intéressant pour vous. Bien que, parmi toutes les langues compilant en JavaScript, ce soit loin d’être mon premier choix, cela présenterait pour vous une transition très facile, permettant même peut-être de porter du code existant sans douleur.
back2dos
1
@MebAlone Douglas est un peu en conflit. Les développeurs qui se plaignent n'acceptent pas les nouvelles idées, mais affirmer que dart est une mauvaise chose en 2012 alors qu'elle vient tout juste d'être publiée il y a 2 jours. Ils ont annoncé que cela arriverait il y a 2 ans. Comme c'est le cas de dart, Douglas est mécontent de certaines choses que JS n’apprécie pas (aucun constructeur ne fonctionne avec un prototype "en vrac"). Tout en gardant les choses qu'il aime (comme les fermetures). Dans plusieurs présentations, je l'ai vu louer le prototype, puis critiquer la syntaxe des fonctions du constructeur (il a raison). Puis "résout" en montrant un modèle de module qui ignore complètement l'existence du prototype.
HMR

Réponses:

65

Merci pour votre question! Clause de non-responsabilité, je travaille dans l'équipe Dart.

Le principal avantage de Dart aujourd'hui est probablement sa familiarité avec les développeurs C #, Java, C ++ et la plupart des développeurs JavaScript. De nombreux développeurs ont des attentes vis-à-vis de leur langage (OO basé sur la classe, portée lexicale, syntaxe familière) et de leurs outils (complétion de code, refactoring, navigation de code, débogage) que Dart vise à atteindre et à dépasser.

Voici quelques choses que j'aime dans la langue:

  1. Types statiques optionnels. Lorsque je suis en train de prototyper ou d'écrire simplement de petits scripts, je n'utilise pas une tonne de types statiques. Je n'ai simplement pas besoin d'eux et je ne veux pas m'embourber avec la cérémonie. Cependant, certains de ces scripts évoluent vers de plus gros programmes. À mesure que les scripts évoluent, j'ai tendance à vouloir des classes et des annotations de type statique.

  2. Innocent jusqu'à preuve du contraire. Dart s'efforce de minimiser les situations entraînant une erreur lors de la compilation. De nombreuses conditions dans Dart sont des avertissements qui n'arrêtent pas l'exécution de votre programme. Pourquoi? Conformément au mode de développement Web, il est impératif de permettre aux développeurs d’essayer un peu de code, de cliquer sur reload et de voir ce qui se passe. Le développeur ne devrait pas avoir à prouver au préalable que le programme complet est correct avant de tester un élément du code.

  3. Portée lexicale. C'est génial, si vous n'y êtes pas habitué. En termes simples, la visibilité des variables, et même celle-ci , est définie par la structure du programme. Cela élimine une classe de casse-tête dans la programmation Web traditionnelle. Pas besoin de relier les fonctions pour garder cela à ce que vous pensez ou attendez.

  4. De vraies classes cuites dans la langue. Il est clair que la plupart des développeurs souhaitent travailler en classe, car la plupart des frameworks de développement Web offrent une solution. Cependant, une "classe" du framework A n'est pas compatible avec le framework B, dans le développement Web traditionnel. Dart utilise les classes naturellement.

  5. Fonctions de haut niveau. Une partie douloureuse de Java est que tout doit être mis dans une classe. C'est un peu artificiel, surtout lorsque vous voulez définir quelques fonctions utilitaires. Dans Dart, vous pouvez définir des fonctions au niveau supérieur, en dehors de toute classe. Cela rend la composition de la bibliothèque plus naturelle.

  6. Les classes ont des interfaces implicites. L'élimination des interfaces explicites simplifie le langage. Plus besoin de définir IDuck partout, tout ce dont vous avez besoin maintenant est une classe Canard. Chaque classe ayant une interface implicite, vous pouvez créer unMockDuck implements Duck

  7. Constructeurs nommés. Vous pouvez donner des noms aux constructeurs, ce qui aide vraiment à la lisibilité. Par exemple:var duck = new Duck.fromJson(someJsonString)

  8. Constructeurs d'usine. Le modèle d’usine est assez courant, et c’est agréable de voir cela dans le langage. Un constructeur d'usine peut renvoyer un singleton, un objet d'un cache ou un objet d'un sous-type.

  9. Isole. L'époque du partage de l'état mutable entre les threads est révolue (une technique sujette aux erreurs). Un isolat Dart est un segment de mémoire isolé, capable de s'exécuter dans un processus ou un thread séparé. Isole la communication en envoyant des messages sur les ports. Isole le travail dans la machine virtuelle Dart et peut être compilé pour les travailleurs Web dans les applications HTML5.

  10. Dart compile en JavaScript. Cela revêt une importance cruciale, car JavaScript est la lingua franca du Web. Les applications de fléchettes doivent parcourir le Web moderne.

  11. Fort outillage. Le projet Dart contient également un éditeur. Vous y trouverez la complétion de code, le refactoring, des solutions rapides, la navigation de code, le débogage, etc. En outre, IntelliJ a un plugin Dart.

  12. Bibliothèques Vous pouvez organiser le code Dart dans des bibliothèques pour un espacement des noms et une réutilisation plus faciles. Votre code peut importer une bibliothèque et les bibliothèques peuvent réexporter.

  13. Interpolation de chaîne. Ceci est juste une fonctionnalité intéressante, facilitant la composition d'une chaîne:var msg = "Hello $friend!";

  14. noSuchMethod Dart est un langage dynamique, et vous pouvez gérer des appels de méthode arbitraires avec noSuchMethod().

  15. Génériques. Etre capable de dire "ceci est une liste de pommes" donne à vos outils beaucoup plus d’informations pour vous aider à détecter les erreurs potentielles plus tôt. Heureusement, les génériques de Dart sont plus simples que ce à quoi vous êtes probablement habitué.

  16. Surcharge de l'opérateur. Les classes de fléchettes peuvent définir un comportement pour des opérateurs tels que +ou -. Par exemple, vous pourriez écrire du code comme new Point(1,1) + new Point(2,2).

Cela dit, il existe beaucoup plus de bibliothèques JavaScript.

Personnellement, je pense qu’il existe de nombreuses langues sur le Web. Si l'application est géniale et qu'elle fonctionne dans la majorité des navigateurs modernes, le langage dans lequel elle est écrite importe peu. Tant que vous, le développeur, êtes heureux, productif et que vous lancez sur le Web, c'est ce qui importe! :)

Seth Ladd
la source
De nombreux langages de programmation modernes (Ruby, Scala, Python) incluent une sorte de mécanisme d'héritage multiple, et cela arrive dans JDK8. Est-ce prévu pour Dart?
MebAlone
4
+1 sur le point 1 - le typage dynamique est tout à fait adéquat pour les petits scripts (c'est-à-dire le niveau de "validation de formulaire"). Rien de plus, et je trouve le filet de sécurité du typage statique indispensable.
Funkybro
2
@MebAlone Je pense que les mixins arriveront bientôt chez Dart.
Seth Ladd
La prise de vue surprise n'a pas été mentionnée - IMO est l'une des meilleures fonctionnalités de Dart.
mythz
@mythz Je n'ai pas mentionné les instantanés, car ils ne sont pas encore complètement implémentés. Mais oui, ils sont cool!
Seth Ladd
11

En écrivant beaucoup de C # au travail, la langue ressemble beaucoup à celle à laquelle je suis habitué

C'est un point sur Dart. Javascript est considéré comme une langue maladroite avec quelques idiomes généraux. Dans un langage comme Java, il existe souvent une façon naturelle d'aborder un problème. Par exemple, si vous conservez un inventaire de table, en Java ou en C #, vous créerez une classe Table.

Javascript n'a pas de classes, vous pouvez utiliser des prototypes mais ils se sentent maladroits et ne fournissent pas une structure et des outils d'encapsulation aussi puissants. (Du moins pas sans faire de cascades.) L'héritage, la composition, etc. est délicat avec les prototypes Javascript. C'est pourquoi la plupart des gens utilisent des cartes de hachage simples pour stocker des données. Ou ils utilisent des bibliothèques tierces comme un prototype qui vous donne une expérience de classe.

Donc, la commodité est une chose, structurer l’autre. Javascript ne s'adapte pas bien parce qu'il n'y a pas de moyen standard de structurer des applications à grande échelle. Cependant, actuellement, ces bibliothèques tierces deviennent très populaires. (Comme backbone.js)

Dart est quelque chose à résoudre. Il est là pour vous donner la commodité structurelle de Java et, en outre, il ne possède pas toutes ces fonctionnalités JS maladroites. (La plupart d'entre eux étaient liés à un typage faible.)

Donc, la réponse est oui: classes, héritage, ...: "POO traditionnel". (La plupart des applications Web JS de realworld utilisent la méthode de rappel basée sur les rappels de jQuery.) Et elle utilise une forme de typage statique, mais ce n’est pas le principal argument de vente.

BTW: vous voudrez peut-être lire ce mailing "interne" de Google daté de 2010: Future of Javascript

Javascript a des défauts fondamentaux qui ne peuvent pas être corrigés simplement en faisant évoluer la langue. Nous adopterons une stratégie à deux volets pour l’avenir du Javascript ... Développer un nouveau langage (appelé Dash) qui vise à maintenir la nature dynamique du javascript, mais présente un meilleur profil de performances et se prête à l’outillage pour les grands projets. .

Philippe
la source
5
Tout le monde ne considère pas le Javascript comme une "langue maladroite". Il y a souvent une manière naturelle d'aborder un problème. Trop souvent, il nécessite des techniques (programmation fonctionnelle, surcharge d’opérateurs, mixins, programmation générique) non prises en charge par Java. L'héritage, la composition, etc. n'est pas gênant avec les prototypes Javascript. C'est juste différent de Java et C #, mais semblable à Ruby, LUA et Perl.
kevin cline
1
Mmm ... la première fois que j'entends parler de prototypes Mais de quelle manière voyez-vous les prototypes JS similaires à Ruby?
Philip
1
vous devez sortir (du monde Java) plus souvent. Regardez la métaprogrammation Ruby ( ruby-doc.org/docs/ProgrammingRuby/html/ext_ruby.html ) et vous verrez que la résolution de nom de membre Ruby est similaire à (mais la résolution est plus compliquée que) JavaScript.
kevin cline
En aucun cas, jQuery ne favorise une approche de rappel, pas plus que ne le ferait l'API DOM (qu'elle encapsule), le JS principal ou Dart. Les prototypes sont le mécanisme d'héritage qui nous permet de faire des choses que les classes ne peuvent pas. Comparez les classes aux constructeurs de fonctions, qui encapsulent parfaitement les variables d'instance internes, pas les prototypes. Cela ne veut pas dire que votre médiateur des niveaux de talent médian, spammer Java ou C # dev, a la moindre idée de ce que l’encapsulation est bon pour un développeur Google moyen a la moindre idée de la façon d’écrire JavaScript.
Erik Reppen
@ErikReppen: si vous utilisez jQuery exclusivement pour la manipulation DOM, vous pouvez écrire du code ne nécessitant que très peu de rappels, si vous le combinez avec d'autres frameworks tels que backbone.js. La liaison d'événements avec jQuery favorise beaucoup les rappels (anonymes). backbone.js a IMHO une approche plus structurée.
Philip
5

Pour moi, cela me donne la possibilité de structurer mon code mieux que JavaScript avec une portée et des classes.

C'est similaire à Java et JavaScript et avec Dart Editor, j'avais une adaptation proche de zéro. J'ai commencé à coder tout de suite.

var ws = new [Moz]WebSocketdevoir s'occuper de différents navigateurs est ennuyant. Dart compile en code JavaScript compatible avec les navigateurs populaires.

Mon défi consiste principalement à interfacer avec du code JavaScript. Je trouve en quelque sorte un moyen de le contourner, mais ce serait mieux si cela faisait partie de Dart.

Abiola
la source
D'accord, @Abiola, Dart a besoin d'une meilleure interop JavaScript. C'est vraiment dans le radar, j'attends avec impatience ce que l'équipe propose.
Seth Ladd
0

Depuis le début du Web 2.0, l’approche Java / C # a définitivement pour objectif de frapper JS. Cela est dû à une différenciation artificielle (ou très réelle et nécessaire) entre les langages côté client et les langages côté serveur. Je pense que c'est ainsi que les langues côté serveur peuvent rester sous le "contrôle" des domaines de problèmes principaux des applications Web et délimiter le code moins sérieux (code ui) du code commercial (côté serveur). Je pense aussi que Java aime rester un noyau serveur car il a perdu la guerre de l'interface graphique avec les applets, principalement à cause de Flash et HTML 5. Maintenant, vous avez RedTamarin, un projet NodeJS-esque AS3 faisant allusion à un futur pluriel mélangé de paradigmes unifiés avant et arrière. .

Vodbro
la source