34
#DevoxxFR Java (8) eXperiments Francois Sarradin @fsarradin 1

Java (8) eXperiments - DevoxxFR 2016

Embed Size (px)

Citation preview

Page 1: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Java (8) eXperiments

Francois Sarradin @fsarradin

1

Page 2: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

François Sarradin

• @ippontech - #IpponOz

• Développeur, architecte, data ingénieur

• Manager technique capitalisation

• brownbaglunch.fr

2

Page 3: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

une pratique peut-elle être bonne ?

3

Page 4: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

de nouvelles pratiques pour faire face

aux nouveaux besoins

4

Page 5: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR 5

BECurious

Weird

EXPERIMENTInnovation

Page 6: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR 6

Page 7: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Sommaire

7

• Héritage multiple

• Exception

• Pattern matching

Et du live coding !

Page 8: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Héritage multiple

8

Page 9: Java (8) eXperiments - DevoxxFR 2016

Java 8

Page 10: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

héritage multiple d’état ?

10

Page 11: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Live Demo

11

Page 12: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Ce qu’il faut retenir

12

Page 13: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR 13

• return in -> 2 * in // => singleton

• return in -> 2 * in + out // => new instance

Page 14: Java (8) eXperiments - DevoxxFR 2016

State multiple inheritance

Page 15: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Exception

15

Page 16: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR 16

Email is required

EMail

John

First name

Last name

Wololo

Age

Age must be an integer

Page 17: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

existe-t-il une alternative à throw new Exception(); ?

17

Page 18: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Live Demo

18

Page 19: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Ce qu’il faut retenir

19

Page 20: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Limiter le nombre sous-classes

abstract class Base {

private Base() {}

public static class Class1 extends Base { … }

public static class Class2 extends Base { … }

}

20

Page 21: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Contraindre par le type

21

• Limitation des sous-classes => TDD

• Type = spécification

• ATTENTION !!! null interdit (checkstyle) T = Type

Page 22: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Pattern matching

22

Page 23: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Switch case (Java 7+)

switch (myValue) {

case "hello": System.out.println("hello world"); break;

case "world": System.out.println("world hello"); break;

default : System.out.println("what else!");

}

23

Page 24: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Pattern matching (Scala)

myValue matches {

case "hello" => println("hello world")

case i: Int => println(s"int: $i")

case Add(a, b) => println(s"a + b = ${a + b}")

case _ => println("what else!")

}

24

Page 25: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Live Demo

25

Page 26: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Grammaire

26

MatchCasematch

when

end

Whenthen

Otherwiseotherwise

end

Page 27: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Ce qu’il faut retenir

27

Page 28: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Un DSL en Java qui respecte un grammaire précise…

… C’est possible !

28

Page 29: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Grammaire

29

FirstWord SecondWordfirstWord secondWord

repeat

end

Page 30: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

DSL en Java

FirstWord firstWord(T t0) { return new FirstWord(t0); }

class FirstWord { final T t; FirstWord(T t) { this.t = t; }

FirstWord repeat(T tn) { return new FirstWord(t + tn); }

SecondWord secondWord(R r) { return new SecondWord(r); }

class SecondWord { final R r; SecondWord(R r) { this.r = r; }

S end() { return /* … */; } } }

30

Page 31: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Conclusion

31

Page 32: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Ce que nous avons vu

32

Montrer les mécanismes internes à Java 8

Pousser le compilateur à nous aider (contraintes de type)

Spécification analysée par le compilateur

Page 33: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Ce qu’il faut faire

33

Voir d’autres langages (Python, OCaml, Scala)

Voir d’autres approches (FP, logical programming, prototype based programming, acteurs)

Communiquer !

Page 34: Java (8) eXperiments - DevoxxFR 2016

#DevoxxFR

Merci / Thank you

34

Make bugs, not war