Dart : Premières impressions

La semaine dernière, le langage Dart sortait en version stable. Après avoir été présenté avec fracas il y a plus d'un an, il est maintenant temps de s'intéresser de plus près à ce langage. Présenter comme un javascript-killer, qui doit plonger ce dernier dans les abîmes de l'histoire, le langage tient-il ses promesses? Va t-il décoller ou rester un langage parmi d'autre comme Go?

Bref autant de questions qui me trottaient dans la tête quand je me suis dit qu'il valait mieux que je me forge ma propre opinion en me lançant dans l'étude de ce langage.

 

Détour par les outils de développements


Passage obligé pour tout débutant en dart, le site dartlang édité par Google où se trouvent le SDK et la doc de Dart. Il faut d'abord récupérer le SDK et déjà on voit qu'on dispose de plusieurs outils assez intéressants :

  • Un IDE : DartEditor qui finalement n'est qu'un dérivé d'Eclipse avec le plugin pour Dart
  • Un navigateur : Dartium, une versions de Chromium embarquant une machine virtuelle pour Dart
  • Un compilateur : dart2js qui permet comme son nom l'indique de compiler nos sources Dart en javascript (et ainsi pouvoir les lancer sur d'autre navigateur que Dartium).
  • Une VM Dart : dart qui permet d'exécuter du code Dart dans la console.

 

On dispose donc d'outils plutôt agréable sà utiliser surtout que DartEditor et Dartium travaillent ensemble, ce qui permet de voir les erreurs et exceptions dans DartEditor dès que Dartium les rencontres, ce qui a l'avantage de faciliter le développement par rapport au classique couple firebug/éditeur de texte

Il est possible aussi de récupérer la documentation de Dart mais celle-ci est aussi accessible en ligne. La documentation est complète, mais manque peut-être de quelques exemples. Après mon avis est sûrement biaisé par la documentation de PHP qui est rempli d'exemples. Il est aussi intéressant de récupérer le guide « A tour of Dart Language » qui présente la plupart des fonctionnalités du langage en question.

 

Dart en lui-même


Quand on se lance dans Dart, on voit clairement d'où vient l'inspiration des concepteurs. On retrouve des éléments de Javascript, pas mal de choses venant de Java et aussi sûrement quelques emprunts à Ruby.

La première chose incontournable à savoir est qu'en Dart tout est objet, y compris les types primitifs comme int ou bool, mais aussi les fonctions. L'autre chose à savoir c'est qu'en Dart, il y a possibilité de typer ses variables (mais ce n'est pas obligatoire), ça permet de trouver beaucoup plus vite des erreurs et aussi d'avoir un code plus propre (ceci reste un avis personnel).

Dart propose un modèle objet beaucoup plus « classique » où les prototypes sont absents. Dart permet de créer des classes et d'en faire des instances avec une syntaxe proche de Java (ou du C#). Toute classe en Dart, hérite de la classe Object ce qui lui permet d'avoir un certain nombre de méthode de base (comme la méthode toString par hasard).

 

void main() {
  Voiture v = new Voiture("Espace", "Bleu");
  print(v.toString());
}

class Voiture {
  String _modele, _couleur;
  Voiture(this._modele, this._couleur);
}

 

Ce code renverra la chaine : Instance of 'Voiture'. Si maintenant, on s'amuse à modifier la méthode toString, on peut tout à fait modifier le renvoi. Le morceau de code ci-dessus, vous montre déjà pas mal de choses sur Dart :

  • Tout le code doit se trouver dans une fonction, c'est la fonction main() qui est exécuté.
  • Il n'y a pas de mot clé pour la visibilité dans la classe, celle-ci fonctionne avec une convention de nommage. Tout attribut qui commence par un underscore n'est pas accessible en dehors de la Library (un fichier ou un ensemble de fichier) où il est défini.
  • Dart propose un sucre syntaxique assez intéressant. Ainsi la ligne Voiture(this._modele, this._couleur); qui est le constructeur de la classe Voiture (il a le même nom) attendra deux arguments donc il stockera le premier dans _modele et le deuxième dans _couleur. Attention : Ce sucre syntaxique ne fonctionne que dans le constructeur ;) .

 

Ces quelques lignes, permettes déjà de se donner une idée du but de Dart qui est de permettre la création d'un code rigoureux mais rapide à écrire avec pas mal de sucre syntaxique.

On retrouve aussi en Dart, un modèle objet entier comme on en trouve dans la plupart des langages actuelles. Ce qui permet de faire des choses jusqu'alors impossible en Javascript (ou alors beaucoup plus complexe) :

  • De l'héritage
  • Des interfaces
  • Des exceptions
  • Des getters/setters
  • Du polymorphisme

 

Petite déception cependant pour les interfaces puisqu'on parle d'interface mais qu'il n'existe pas comme tel, ce ne sont que des classes abstraites donc aucune méthode n'est défini. C'est malheureux puisque Dart ne gère pas l'héritage multiple. Les interfaces permettaient en général de régler ce problème. Ici, il faudra faire autrement.

 

La librairie standard


La librairie standard de Dart est sans aucun doute un gros avantage, avec un nombre de paquet permettant de toucher tous les aspects du développement web (et aussi un paquet pour le côté serveur). On retrouve notamment :

  • dart:html : librairie de gestion du HTML avec notamment DOM et la gestion du canvas
  • dart:collection : librairie qui propose plusieurs classes de gestion de structure de données (liste chaînés, itérateur, HashMap...)
  • dart:isolate : permet de faire de la programmation parallèle (thread) en dart
  • dart:web_audio : librairie de gestion du son
  • dart:web_gl : librairie de gestion du webGl (permettant de faire de la 3d dans le navigateur)

 

En plus de ces librairies, on trouve aussi des fonctions pour gérer le JSON, la serialization, les tests unitaires.

On trouve aussi une librairie plus surprenante dans un langage qui vise plutôt le web, je parle de dart:io. C'est une librairie qui regroupe un nombre conséquent de fonctions utile côté serveur : gestion des fichiers, des sockets, des websockets... En bref, de quoi remplacer des outils comme node.js pour le côté serveur.

 

Mise en production


Il n'y a pas de secret, pour l'instant aucun navigateur web ne propose une machine virtuelle Dart en dehors de Dartium. Il est donc obligatoire de passer par un compilateur afin d'obtenir du code JavaScript. C'est le but de dart2js qui permet de générer le code JavaScript d'un fichier Dart. Il suffit alors dans le code HTML de remplacer la ligne d'inclusion du fichier Dart par celle du fichier JavaScript et le code fonctionne sous la plupart des navigateurs (tout du moins les versions récentes).

Pendant le début de ma prise en main de Dart, je me suis amusé à transposer une ancienne animation que j'avais en JavaScript en Dart. Je vous propose donc ci-dessous deux liens. Le premier propose la version avec le code Dart (il est donc nécessaire de l'ouvrir avec Dartium pour qu'elle fonctionne) et l'autre contient la version JavaScript (afin que vous puissiez comparer les deux).

 


Pour finir, je vais vous livrer mon avis sur le Dart. C'est selon moi un langage plein de promesses malgré quelques petites imperfections mais qui est une parfaite alternative au JavaScript. Bien sûr, JavaScript reste préférable sur des codes de petites tailles où il est inutile de sortir l'artillerie lourde (un peu comme JQuery qui n'est pas vraiment utile sur des codes d'une dizaine de ligne). Mais je pense vraiment que sur le prochain développements costaux que je prévoyais de faire en JavaScript, je tenterai l'option Dart afin de me faire un avis plus précis.

L'auteur

Toshy

Passionné par l'informatique depuis mon plus jeune age, j'anime un blog sur le développement web et les différents domaines qui s'y attachent : administration système, bonne pratique de développement, framework web.
Je suis développeur web de profession, diplômé d'un DUT d'informatique, je travaille actuellement au sein du service informatique d'une université.