java8 experiment - normandy jug

34
Java 8 eXperiment(s) François Sarradin Normandy JUG 20 octobre 2015

Upload: francois-sarradin

Post on 22-Jan-2018

594 views

Category:

Software


3 download

TRANSCRIPT

Page 1: Java8 eXperiment - Normandy JUG

Java 8 eXperiment(s)François SarradinNormandy JUG20 octobre 2015

Page 2: Java8 eXperiment - Normandy JUG

WARNING!!!

Page 3: Java8 eXperiment - Normandy JUG

françois sarradin• ippon technologies (ippon.fr)

• manager technique capitalisation

• extremist programmer, FP, agilité

• http://brownbaglunch.fr/

• twitter: @fsarradin

• blog: https://kerflyn.wordpress.com/

Page 4: Java8 eXperiment - Normandy JUG

plan

1. héritage multiple

2. exception

3. pattern matching

et du live coding !!!

Page 5: Java8 eXperiment - Normandy JUG

héritage multiple

Page 6: Java8 eXperiment - Normandy JUG

objet = état + comportement

Page 7: Java8 eXperiment - Normandy JUG

en java 8, on peut faire de l’héritage multiple de comportement

Page 8: Java8 eXperiment - Normandy JUG
Page 9: Java8 eXperiment - Normandy JUG

mais peut-on faire de l’héritage multiple d’état ?

Page 10: Java8 eXperiment - Normandy JUG

un mail de Brian GoetzSubject: Re: From virtual extension methods to mixingFrom: Brian Goetz <…@oracle.com>Date: Mon, 9 Jul 2012 07:50:11 -0400Cc: [email protected]: François Sarradin <…@gmail.com>

Please don't encourage techniques like this. There are a zillion "clever" things you can do in Java, but shouldn't. We knew it wouldn’t be long before someone suggested this, and we can't stop you. But please, use your power for good, and not for evil. Teach people to do it right, not to abuse it.

But please, use your power for good, and not for evil.

Please don't encourage techniques like this.

Page 11: Java8 eXperiment - Normandy JUG
Page 12: Java8 eXperiment - Normandy JUG

un autre mail de Brian GoetzSubject: Re: From virtual extension methods to mixinsFrom: Brian Goetz <…@oracle.com>Date: Tue, 10 Jul 2012 19:51:55 -0400To: François Sarradin <…@gmail.com>

[…]

The bottom line is:

interfaces cannot be counted on to have identity.

Which is a good thing, but can bite the "clever" from behind :)

Page 13: Java8 eXperiment - Normandy JUG

ce qu’il faut retenir

Page 14: Java8 eXperiment - Normandy JUG
Page 15: Java8 eXperiment - Normandy JUG

un mail de Brian GoetzSubject: Re: From virtual extension methods to mixingFrom: Brian Goetz <…@oracle.com>Date: Mon, 9 Jul 2012 07:50:11 -0400Cc: [email protected]: François Sarradin <…@gmail.com>

Please don't encourage techniques like this. There are a zillion "clever" things you can do in Java, but shouldn't. We knew it wouldn’t be long before someone suggested this, and we can't stop you. But please, use your power for good, and not for evil. Teach people to do it right, not to abuse it.

There are a zillion "clever" things you can do in Java, but

shouldn't.

Page 16: Java8 eXperiment - Normandy JUG

exception

Page 17: Java8 eXperiment - Normandy JUG

sun.misc.Unsafe est voué à disparaître ?

Page 18: Java8 eXperiment - Normandy JUG
Page 19: Java8 eXperiment - Normandy JUG

checked exception non déclarée

Field f = Unsafe.class.getDeclaredField("theUnsafe");f.setAccessible(true);Unsafe unsafe = (Unsafe) f.get(null);

// throw undeclared checked exceptionunsafe.throwException(new IOException());

Page 20: Java8 eXperiment - Normandy JUG

alternative ?

Page 21: Java8 eXperiment - Normandy JUG

ce qu’il faut retenir

Page 22: Java8 eXperiment - Normandy JUG

limiter le nombre de sous-classes

public class Base { private Base() {}

public static class Class1 extends Base {} public static class Class2 extends Base {} // ...}

Page 23: Java8 eXperiment - Normandy JUG

type checking

• limitation des sous-classes + generics => TDD

• TDD = type driven development

• ATTENTION !!! null interdit (checkstyle)

Page 24: Java8 eXperiment - Normandy JUG

pyramide de test

UI

Intégration

Unitaire

Compilateur

Page 25: Java8 eXperiment - Normandy JUG

pattern matching

Page 26: Java8 eXperiment - Normandy JUG

Java 8 introduit la programmation fonctionnelle

Page 27: Java8 eXperiment - Normandy JUG

peut-on tenter d’y introduire le pattern matching

Page 28: Java8 eXperiment - Normandy JUG

pattern matching (scala)

myValue match { case "hello" => println("hello world") case i: Int => println("int: $i") case Add(a, b) => println("$a + $b = ${a + b}") case _ => println("what else!")}

Page 29: Java8 eXperiment - Normandy JUG

ce qu’il faut retenir

Page 30: Java8 eXperiment - Normandy JUG

dsl en javaFirstWord firstWord(T t) { return new FirstWord(t); }

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

FirstWord repeat(T t0) { return new FirstWord(t + t0); } SecondWord secondWord(R r) { return new SecondWord(r); }

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

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

Page 31: Java8 eXperiment - Normandy JUG

functional apis (beyond java 8)• fugue (https://bitbucket.org/atlassian/fugue)

• functional java (http://www.functionaljava.org/)

• totallylazy (http://totallylazy.com/)

• jOOλ (https://github.com/jOOQ/jOOL)

• javaslang (http://javaslang.com/)

• cyclops (https://github.com/aol/cyclops)

Page 32: Java8 eXperiment - Normandy JUG

conclusion

Page 33: Java8 eXperiment - Normandy JUG

• optimisation en java (ne pas trop avec les concepts)

• limiter le nombres de sous-classes

• type driven development

• dsl en java

Page 34: Java8 eXperiment - Normandy JUG

KEEPCALMAND

THANKYOU