Vous êtes sur la page 1sur 45

21/03/2020 Pr. H.

Mouncif@Matser ISI, 2020 1


Dart, le nouveau langage orienté Web de Google, a été dévoilé au monde en octobre 2011.
Il se veut un langage structuré, non pas révolutionnaire, mais facile d'apprentissage pour tout développeur,
quel que soit son background (C#, Java ou JavaScript) puisque Dart est un agrégat de ces trois langages
avec d'autres, tel que Smalltalk.
Ce nouveau langage a pour objectif d'être tout ce qu'aurait pu être JavaScript s'il avait été inventé
aujourd'hui.
En d'autres termes, garder la nature dynamique du JavaScript, tout en offrant un langage et des outils
facilitant le développement de grosses applications Web.

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 2


Dart en quelques mots :
• Dart est un langage orienté objet avec un héritage simple, des classes concrètes et abstraites, et des interfaces
• Dart est optionnellement typé que ce soit dans l'assignation d'une variable ou la définition d'une fonction ;
• Dart est gouverné par des fonctions de haut niveau, c'est-à-dire des fonctions non encapsulées dans une classe ou
un objet.
• les fonctions sont des objets, ce qui nous permet de les passer en paramètre de constructeurs ou de fonctions,
mais aussi d'avoir des fonctions retournées par une autre fonction ;
• toute application a au moins une fonction de haut niveau, la fonction main() ;
• Dart permet d'utiliser des Generics.
• Dart est par défaut monoprocessus à l'instar de JavaScript. Néanmoins, il a un modèle de concurrence appelé
isolates, permettant une exécution parallèle avec un système de passage de messages. Lorsque compilés en
JavaScript, ces isolates deviennent des Web Workers.

Différences majeures avec JavaScript :


• Dart n'utilise pas de prototypes ;
• Dart ne permet pas de créer et d'exécuter du code à la volée.

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 3


EcoSystem Dart
• Dart n'est pas seulement un langage, c'est une plateforme
de développement qui comprend :
• un SDK avec une VM serveur ;
• un IDE (DartEditor), mais aussi des plugins pour Eclipse et
IntelliJ ;
• une VM cliente (Dartium) ;
• un outil de gestion des dépendances (Pub Package
Manager) ;
• un compilateur Dart vers JavaScript (dart2js) ;
• un générateur de documentation à partir du code (dartdoc) :

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 4


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 5
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 6
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 7
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 8
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 9
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 10
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 11
21/03/2020 12

Exemple
avec Dart

Pr. H. Mouncif@Matser ISI, 2020


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 13
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 14
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 15
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 16
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 17
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 18
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 19
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 20
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 21
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 22
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 23
String interpolation
• To put the value of an expression inside a string, use ${expression}. If the
expression is an identifier, you can omit the {}.

• Here are some examples of using string interpolation:

String Result
• '${3 + 2}’ '5'
• '${"word".toUpperCase()}’ 'WORD'
• '$myObject’ The value of myObject.toString()

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 24


Null-aware operators
• Dart offers some handy operators for dealing with values that might
be null. One is the ??= assignment operator, which assigns a value
to a variable only if that variable is currently null:
String foo = 'a string';
String bar; // Unassigned objects are null
• int a; // The initial value of a is null. by default.
• a ??= 3;
• print(a); // <-- Prints 3. // Substitute an operator that makes 'a
string' be assigned to baz.
String baz = foo /* TODO */ bar;
• a ??= 5;
• print(a); // <-- Still prints 3. void updateSomeVars() {
• Another null-aware operator is ??, which returns the expression on // Substitute an operator that makes 'a
its left unless that expression’s value is null, in which case it string' be assigned to bar.
evaluates and returns the expression on its right: bar /* TODO */ 'a string';
}
• print(1 ?? 3); // <-- Prints 1.
• print(null ?? 12); // <-- Prints 12.

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 25


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 26
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 27
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 28
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 29
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 30
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 31
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 32
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 33
Pr. H. Mouncif@Matser ISI, 2020 21/03/2020 34
Iterable collections

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 35


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 36
Example: Using firstWhere()

21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 37


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 38
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 39
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 40
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 41
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 42
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 43
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 44
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 45