Introduction à Dart

44
Introductio n à 2022-10-29 Introduction à DART 1 DART Yohan BESCHI – Développeur Java @yohanbeschi +Yohan Beschi

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 nous verrons : comment Dart permet de développer des applications clientes aussi bien que serveurs, quelques éléments du langage, mais aussi les outils permettant un développement industrialisé et une productivité accrue.

Transcript of Introduction à Dart

Page 1: Introduction à Dart

Introduction à

2023-04-12 Introduction à DART 1

DART

Yohan BESCHI – Développeur Java

@yohanbeschi

+Yohan Beschi

Page 2: Introduction à Dart

Pourquoi ce talk ?

2023-04-12 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);

Page 3: Introduction à Dart

Pourquoi ce talk ?

2023-04-12 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);

Plus de 100 lignes

Page 4: Introduction à Dart

Pourquoi ce talk ?

2023-04-12 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);

Page 5: Introduction à Dart

Pourquoi ce talk ?

2023-04-12 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

Page 6: Introduction à Dart

Le gagnant pour moi ?

2023-04-12 Introduction à DART 6

Page 7: Introduction à Dart

Il était une fois…

2023-04-12 Introduction à DART 7

Page 8: Introduction à Dart

Productivité du programmeur

2023-04-12 Introduction à DART 8

Page 9: Introduction à Dart

Application évolutive

2023-04-12 Introduction à DART 9

Page 10: Introduction à Dart

Rapidité d'exécution

2023-04-12 Introduction à DART 10

Page 11: Introduction à Dart

Performance au démarrage

2023-04-12 Introduction à DART 11

Page 12: Introduction à Dart

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

2023-04-12 Introduction à DART 12

Page 13: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 13

abstract class Validatable { }

Page 14: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 14

abstract class Validatable { List<Object> valuesToValidate();}

Page 15: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 15

abstract class Validator<T extends Validatable> {

}

Page 16: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 16

abstract class Validator<T extends Validatable> { bool validate(T object) {

}}

Page 17: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 17

abstract class Validator<T extends Validatable> { bool validate(T object) { for (Object obj in object.valuesToValidate()) {

} }}

Page 18: Introduction à Dart

Classes abstraites

2023-04-12 Introduction à DART 18

abstract class Validator<T extends Validatable> { bool validate(T object) { for (Object obj in object.valuesToValidate()) { if (StringUtils.isEmpty(obj.toString())) { } } }}

Page 19: Introduction à Dart

Classes abstraites

2023-04-12 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; }}

Page 20: Introduction à Dart

Classes concrètes

2023-04-12 Introduction à DART 20

class User {

}

Page 21: Introduction à Dart

Classes concrètes

2023-04-12 Introduction à DART 21

class User implements Validatable {

}

Page 22: Introduction à Dart

Classes concrètes

2023-04-12 Introduction à DART 22

class User implements Validatable { String username; String password; }

Page 23: Introduction à Dart

Classes concrètes

2023-04-12 Introduction à DART 23

class User implements Validatable { String username; String password; User(this.username, this.password); }

Page 24: Introduction à Dart

Classes concrètes

2023-04-12 Introduction à DART 24

class User implements Validatable { String username; String password; User(this.username, this.password); List<Object> valuesToValidate() { return [username, password]; }}

Page 25: Introduction à Dart

Mais ce n’est pas tout

2023-04-12 Introduction à DART 25

⦿Mixins⦿Optionnellement typé⦿Gouverné par des fonctions de haut niveau⦿Mono processus

Page 26: Introduction à Dart

Librairies disponibles

⦿Core⦿HTML⦿Async⦿ IO⦿Crypto⦿ JSON⦿Mirrors⦿UTF

⦿TU et Mocks⦿Math⦿Logging⦿URI⦿ I18N⦿etc.

2023-04-12 Introduction à DART 26

Page 27: Introduction à Dart

Futures / Callback Hell - JS

2023-04-12 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()

}); }); });

}); });});

Page 28: Introduction à Dart

Futures / Callback Hell - Dart

2023-04-12 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(); };}

Page 29: Introduction à Dart

Isolates

2023-04-12 Introduction à DART 29

Page 30: Introduction à Dart

Machines Virtuelles

2023-04-12 Introduction à DART 30

Page 31: Introduction à Dart

Dartium

2023-04-12 Introduction à DART 31

Page 32: Introduction à Dart

DartEditor

2023-04-12 Introduction à DART 32

Page 33: Introduction à Dart

Plugins

2023-04-12 Introduction à DART 33

Page 34: Introduction à Dart

dart2js

2023-04-12 Introduction à DART 34

Page 35: Introduction à Dart

dart2js

2023-04-12 Introduction à DART 35

Page 36: Introduction à Dart

dart2js

⦿Cible HTML5⦿Tree Shaking⦿Agrégation/Minification⦿Optimisation

2023-04-12 Introduction à DART 36

Page 37: Introduction à Dart

pub

2023-04-12 Introduction à DART 37

Page 38: Introduction à Dart

pub

2023-04-12 Introduction à DART 38

name: pacifista_rocksdescription: The best application in the whole worldversion: 0.0.1dependencies: great_lib: any

pubspec.yaml

Page 39: Introduction à Dart

dartdoc

2023-04-12 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() { }

Page 40: Introduction à Dart

dartdoc

2023-04-12 Introduction à DART 40

Page 41: Introduction à Dart

Utilisation

⦿Création de sites Single-Page⦿Création d'application complètes⦿ Jeux HTML

2023-04-12 Introduction à DART 41

Page 42: Introduction à Dart

Roadmap

2023-04-12 Introduction à DART 42

Aujourd'hui : M2 Mi-fevrier : M3 Été : V1 !

Page 43: Introduction à Dart

Aller plus loinDartLangFR⦿ 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

2023-04-12 Introduction à DART 43

Page 44: Introduction à Dart

Merci

Des questions ?

2023-04-12 Introduction à DART 44