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