Top Banner

Click here to load reader

44

Introduction à dart

Jul 09, 2015

Download

Education

yohanbeschi

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.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introduction à dart

2013-02-13 Introduction à DART 1

DART

Yohan BESCHI – Développeur Java

@yohanbeschi

+Yohan Beschi

Page 2: Introduction à dart

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);

Page 3: Introduction à dart

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);

Page 4: Introduction à dart

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);

Page 5: Introduction à dart

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

Page 6: Introduction à dart

Le gagnant pour moi ?

2013-02-13 Introduction à DART 6

Page 7: Introduction à dart

Il était une fois…

2013-02-13 Introduction à DART 7

Page 8: Introduction à dart

Productivité du programmeur

2013-02-13 Introduction à DART 8

Page 9: Introduction à dart

Application évolutive

2013-02-13 Introduction à DART 9

Page 10: Introduction à dart

Rapidité d'exécution

2013-02-13 Introduction à DART 10

Page 11: Introduction à dart

Performance au démarrage

2013-02-13 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

2013-02-13 Introduction à DART 12

Page 13: Introduction à dart

Classes abstraites

2013-02-13 Introduction à DART 13

abstract class Validatable {

}

Page 14: Introduction à dart

Classes abstraites

2013-02-13 Introduction à DART 14

abstract class Validatable {

List<Object> valuesToValidate();

}

Page 15: Introduction à dart

Classes abstraites

2013-02-13 Introduction à DART 15

abstract class Validator<T extends Validatable> {

}

Page 16: Introduction à dart

Classes abstraites

2013-02-13 Introduction à DART 16

abstract class Validator<T extends Validatable> {

bool validate(T object) {

}

}

Page 17: Introduction à dart

Classes abstraites

2013-02-13 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

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())) {

}

}

}

}

Page 19: Introduction à dart

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;

}

}

Page 20: Introduction à dart

Classes concrètes

2013-02-13 Introduction à DART 20

class User {

}

Page 21: Introduction à dart

Classes concrètes

2013-02-13 Introduction à DART 21

class User implements Validatable {

}

Page 22: Introduction à dart

Classes concrètes

2013-02-13 Introduction à DART 22

class User implements Validatable {

String username;

String password;

}

Page 23: Introduction à dart

Classes concrètes

2013-02-13 Introduction à DART 23

class User implements Validatable {

String username;

String password;

User(this.username, this.password);

}

Page 24: Introduction à dart

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];

}

}

Page 25: Introduction à dart

Mais ce n’est pas tout

2013-02-13 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.

2013-02-13 Introduction à DART 26

Page 27: Introduction à dart

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()

});

});

});

});

});

});

Page 28: Introduction à dart

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();

};

}

Page 29: Introduction à dart

Isolates

2013-02-13 Introduction à DART 29

Page 30: Introduction à dart

Machines Virtuelles

2013-02-13 Introduction à DART 30

Page 31: Introduction à dart

Dartium

2013-02-13 Introduction à DART 31

Page 32: Introduction à dart

DartEditor

2013-02-13 Introduction à DART 32

Page 33: Introduction à dart

Plugins

2013-02-13 Introduction à DART 33

Page 34: Introduction à dart

dart2js

2013-02-13 Introduction à DART 34

Page 35: Introduction à dart

dart2js

2013-02-13 Introduction à DART 35

Page 36: Introduction à dart

dart2js

⦿Cible HTML5

⦿Tree Shaking

⦿Agrégation/Minification

⦿Optimisation

2013-02-13 Introduction à DART 36

Page 37: Introduction à dart

pub

2013-02-13 Introduction à DART 37

Page 38: Introduction à dart

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

Page 39: Introduction à dart

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() {

}

Page 40: Introduction à dart

dartdoc

2013-02-13 Introduction à DART 40

Page 41: Introduction à dart

Utilisation

⦿Création de sites Single-Page

⦿Création d'application complètes

⦿ Jeux HTML

2013-02-13 Introduction à DART 41

Page 42: Introduction à dart

Roadmap

2013-02-13 Introduction à DART 42

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

Page 43: Introduction à dart

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

Page 44: Introduction à dart

Des questions ?

2013-02-13 Introduction à DART 44