introduction à dart
DESCRIPTION
Dart, le nouveau langage Web de Google présenté au public en octobre 2011 a pour objectif de proposer une alternative au JavaScript. Bien que la version finale ne soit pas encore disponible (pour cela il faudra attendre cet été), Dart est utilisable dès aujourd'hui. Au cours de cette présentation sont introduits les éléments suivants : - comment Dart permet de développer des applications clientes aussi bien que serveurs, - le langage, - les outils permettant un développement industrialisé et une productivité accrue.TRANSCRIPT
2013-02-13 Introduction à DART 1
DART
Yohan BESCHI – Développeur Java
@yohanbeschi
+Yohan Beschi
Pourquoi ce talk ?
2013-02-13 Introduction à DART 2
CellTable<User> table = new CellTable<User>();
TextColumn<User> idColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.id;
}
};
TextColumn<User> firstNameColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.firstName;
}
};
TextColumn<User> lastNameColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.lastName;
}
};
TextColumn<User> ageColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.age;
}
};
idColumn.setSortable(true);
firstNameColumn.setSortable(true);
lastNameColumn.setSortable(true);
ageColumn.setSortable(true);
table.addColumn(idColumn, "ID");
table.addColumn(firstNameColumn, "First name");
table.addColumn(lastNameColumn, "Lats name");
table.addColumn(ageColumn, "Age");
ListDataProvider<User> dataProvider = new ListDataProvider<User>();
dataProvider.addDataDisplay(table);
List<User> list = dataProvider.getList();
for (User user : USERS) {
list.add(user);
}
ListHandler<User> columnSortHandler = new ListHandler<Tester.User>(list);
columnSortHandler.setComparator(idColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.id.compareTo(o2.id) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(firstNameColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.firstName.compareTo(o2.firstName) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(lasteNameColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.lasteName.compareTo(o2.lasteName) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(ageColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.age.compareTo(o2.age) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
table.getColumnSortList().push(firstNameColumn);
Pourquoi ce talk ?
2013-02-13 Introduction à DART 3
CellTable<User> table = new CellTable<User>();
TextColumn<User> idColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.id;
}
};
TextColumn<User> firstNameColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.firstName;
}
};
TextColumn<User> lastNameColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.lastName;
}
};
TextColumn<User> ageColumn = new TextColumn<User>() {
@Override
public String getValue(User user) {
return user.age;
}
};
idColumn.setSortable(true);
firstNameColumn.setSortable(true);
lastNameColumn.setSortable(true);
ageColumn.setSortable(true);
table.addColumn(idColumn, "ID");
table.addColumn(firstNameColumn, "First name");
table.addColumn(lastNameColumn, "Lats name");
table.addColumn(ageColumn, "Age");
ListDataProvider<User> dataProvider = new ListDataProvider<User>();
dataProvider.addDataDisplay(table);
List<User> list = dataProvider.getList();
for (User user : USERS) {
list.add(user);
}
ListHandler<User> columnSortHandler = new ListHandler<Tester.User>(list);
columnSortHandler.setComparator(idColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.id.compareTo(o2.id) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(firstNameColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.firstName.compareTo(o2.firstName) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(lasteNameColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.lasteName.compareTo(o2.lasteName) : 1;
}
return -1;
}
});
columnSortHandler.setComparator(ageColumn,
new Comparator<Tester.User>() {
public int compare(User o1, User o2) {
if (o1 == o2) {
return 0;
}
if (o1 != null) {
return (o2 != null) ? o1.age.compareTo(o2.age) : 1;
}
return -1;
}
});
table.addColumnSortHandler(columnSortHandler);
table.getColumnSortList().push(firstNameColumn);
Pourquoi ce talk ?
2013-02-13 Introduction à DART 4
Table<User> table = new Table (sorting:true)
..addColumn('ID', new TextCell((User o) => o.id))
..addColumn('First name', new TextCell((User o) => o.firstName))
..addColumn('Last name', new TextCell((User o) => o.lastName))
..addColumn('Age', new TextCell((User o) => o.age))
..setData(objs);
Pourquoi ce talk ?
2013-02-13 Introduction à DART 5
Table<User> table = new Table (sorting:true)
..addColumn('ID', new TextCell((User o) => o.id))
..addColumn('First name', new TextCell((User o) => o.firstName))
..addColumn('Last name', new TextCell((User o) => o.lastName))
..addColumn('Age', new TextCell((User o) => o.age))
..setData(objs);
6 lignes
Le gagnant pour moi ?
2013-02-13 Introduction à DART 6
Il était une fois…
2013-02-13 Introduction à DART 7
Productivité du programmeur
2013-02-13 Introduction à DART 8
Application évolutive
2013-02-13 Introduction à DART 9
Rapidité d'exécution
2013-02-13 Introduction à DART 10
Performance au démarrage
2013-02-13 Introduction à DART 11
L'arrivée de DART
⦿Open Source (BSD)
⦿Structuré
⦿Anti-Révolutionnaire
⦿Dans la mouvance des frameworks JS
⦿N’a pas pour objectif de casser le web
2013-02-13 Introduction à DART 12
Classes abstraites
2013-02-13 Introduction à DART 13
abstract class Validatable {
}
Classes abstraites
2013-02-13 Introduction à DART 14
abstract class Validatable {
List<Object> valuesToValidate();
}
Classes abstraites
2013-02-13 Introduction à DART 15
abstract class Validator<T extends Validatable> {
}
Classes abstraites
2013-02-13 Introduction à DART 16
abstract class Validator<T extends Validatable> {
bool validate(T object) {
}
}
Classes abstraites
2013-02-13 Introduction à DART 17
abstract class Validator<T extends Validatable> {
bool validate(T object) {
for (Object obj in object.valuesToValidate()) {
}
}
}
Classes abstraites
2013-02-13 Introduction à DART 18
abstract class Validator<T extends Validatable> {
bool validate(T object) {
for (Object obj in object.valuesToValidate()) {
if (StringUtils.isEmpty(obj.toString())) {
}
}
}
}
Classes abstraites
2013-02-13 Introduction à DART 19
abstract class Validator<T extends Validatable> {
bool validate(T object) {
for (Object obj in object.valuesToValidate()) {
if (StringUtils.isEmpty(obj.toString())) {
return false;
}
}
return true;
}
}
Classes concrètes
2013-02-13 Introduction à DART 20
class User {
}
Classes concrètes
2013-02-13 Introduction à DART 21
class User implements Validatable {
}
Classes concrètes
2013-02-13 Introduction à DART 22
class User implements Validatable {
String username;
String password;
}
Classes concrètes
2013-02-13 Introduction à DART 23
class User implements Validatable {
String username;
String password;
User(this.username, this.password);
}
Classes concrètes
2013-02-13 Introduction à DART 24
class User implements Validatable {
String username;
String password;
User(this.username, this.password);
List<Object> valuesToValidate() {
return [username, password];
}
}
Mais ce n’est pas tout
2013-02-13 Introduction à DART 25
⦿Mixins
⦿Optionnellement typé
⦿Gouverné par des fonctions de haut niveau
⦿Mono processus
Librairies disponibles
⦿Core
⦿HTML
⦿Async
⦿ IO
⦿Crypto
⦿ JSON
⦿Mirrors
⦿UTF
⦿TU et Mocks
⦿Math
⦿Logging
⦿URI
⦿ I18N
⦿etc.
2013-02-13 Introduction à DART 26
Futures / Callback Hell - JS
2013-02-13 Introduction à DART 27
getWinningNumber( (int result1) {
updateResult(1, result1);
getWinningNumber( (int result2) {
updateResult(2, result2);
getWinningNumber( (int result3) {
updateResult(3, result3);
getWinningNumber( (int result4) {
updateResult(4, result4);
getWinningNumber( (int result5) {
updateResult(5, result5);
getWinningNumber( (int result6) {
updateResult(6, result6);
//snip getResultsString()
});
});
});
});
});
});
Futures / Callback Hell - Dart
2013-02-13 Introduction à DART 28
void main() {
getFutureWinningNumber()
.then(next(1))
.then(next(2))
.then(next(3))
.then(next(4))
.then(next(5))
.then(next(6));
}
Function next(int position) {
return (int result) {
updateResult(position, result);
return getFutureWinningNumber();
};
}
Isolates
2013-02-13 Introduction à DART 29
Machines Virtuelles
2013-02-13 Introduction à DART 30
Dartium
2013-02-13 Introduction à DART 31
DartEditor
2013-02-13 Introduction à DART 32
Plugins
2013-02-13 Introduction à DART 33
dart2js
2013-02-13 Introduction à DART 34
dart2js
2013-02-13 Introduction à DART 35
dart2js
⦿Cible HTML5
⦿Tree Shaking
⦿Agrégation/Minification
⦿Optimisation
2013-02-13 Introduction à DART 36
pub
2013-02-13 Introduction à DART 37
pub
2013-02-13 Introduction à DART 38
name: pacifista_rocks
description: The best application in the whole world
version: 0.0.1
dependencies:
great_lib: any
pubspec.yaml
dartdoc
2013-02-13 Introduction à DART 39
/// This is a single-line documentation comment.
/**
* This is a multi-line documentation comment.
* To generate the documentation:
* $ dartdoc <filename>
*/
void main() {
}
dartdoc
2013-02-13 Introduction à DART 40
Utilisation
⦿Création de sites Single-Page
⦿Création d'application complètes
⦿ Jeux HTML
2013-02-13 Introduction à DART 41
Roadmap
2013-02-13 Introduction à DART 42
Aujourd'hui : M2 Mi-fevrier : M3 Été : V1 !
Aller plus loin
DartLangFR⦿ Mailing-list : dartlangfr (https://groups.google.com/forum/?fromgroups=&hl=en#!forum/dartlangfr)
⦿ Google+ : DartlangFR (https://plus.google.com/u/0/communities/104813951711720144450)
⦿ Twitter : @dartlang_fr⦿ Blog : dartlangfr.net
DartLang⦿ Site officiel : www.dartlang.org⦿ Mailing-list : dartlang
(https://groups.google.com/a/dartlang.org/forum/?fromgroups&hl=en#!forum/misc)
⦿ Google+ : Dart (https://plus.google.com/+dartlang)
⦿ Google+ : Dartisans (https://plus.google.com/communities/114566943291919232850)
⦿ Twitter : @dart_lang⦿ Blog : blog.dartwatch.com⦿ Newsletter : Dart weekly
2013-02-13 Introduction à DART 43
Des questions ?
2013-02-13 Introduction à DART 44