Introduction à dart

Post on 09-Jul-2015

210 views 0 download

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 of Introduction à dart

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