Vous êtes sur la page 1sur 57

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
Asynchronous programming: futures, async, await
Why asynchronous code matters
Asynchronous operations let your program complete work while waiting for another
operation to finish. Here are some common asynchronous operations:
• Fetching data over a network.
• Writing to a database.
• Reading data from a file.

To perform asynchronous operations in Dart, you can use the Future class and the async
and await keywords.

• synchronous operation: A synchronous operation blocks other operations from executing until it
completes.
• synchronous function: A synchronous function only performs synchronous operations.
• asynchronous operation: Once initiated, an asynchronous operation allows other operations to
execute before it completes.
• asynchronous function: An asynchronous function performs at least one asynchronous operation
and can also perform synchronous operations.

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


Asynchronous programming: futures, async, await
What is a future?
A future (lower case “f”) is an instance of the Future (capitalized “F”) class. A future
represents the result of an asynchronous operation, and can have two states: uncompleted
or completed

• Uncompleted
When you call an asynchronous function, it returns an uncompleted future. That future is waiting for the
function’s asynchronous operation to finish or to throw an error.

• Completed
If the asynchronous operation succeeds, the future completes with a value. Otherwise it completes with
an error.

• Completing with a value


A future of type Future<T> completes with a value of type T. For example, a future with type
Future<String> produces a string value. If a future doesn’t produce a usable value, then the future’s type
is Future<void>.

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


Asynchronous programming: futures, async, await

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


Asynchronous programming: futures, async, await

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


21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 46
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 47
21/03/2020
48
Pr. H. Mouncif@Matser ISI, 2020
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 49
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 50
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 51
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 52
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 53
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 54
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 55
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 56
21/03/2020 Pr. H. Mouncif@Matser ISI, 2020 57

Vous aimerez peut-être aussi