java8 experiment - normandy jug
TRANSCRIPT
![Page 1: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/1.jpg)
Java 8 eXperiment(s)François SarradinNormandy JUG20 octobre 2015
![Page 2: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/2.jpg)
WARNING!!!
![Page 3: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/3.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/4.jpg)
plan
1. héritage multiple
2. exception
3. pattern matching
et du live coding !!!
![Page 5: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/5.jpg)
héritage multiple
![Page 6: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/6.jpg)
objet = état + comportement
![Page 7: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/7.jpg)
en java 8, on peut faire de l’héritage multiple de comportement
![Page 8: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/8.jpg)
![Page 9: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/9.jpg)
mais peut-on faire de l’héritage multiple d’état ?
![Page 10: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/10.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/11.jpg)
![Page 12: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/12.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/13.jpg)
ce qu’il faut retenir
![Page 14: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/14.jpg)
![Page 15: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/15.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/16.jpg)
exception
![Page 17: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/17.jpg)
sun.misc.Unsafe est voué à disparaître ?
![Page 18: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/18.jpg)
![Page 19: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/19.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/20.jpg)
alternative ?
![Page 21: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/21.jpg)
ce qu’il faut retenir
![Page 22: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/22.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/23.jpg)
type checking
• limitation des sous-classes + generics => TDD
• TDD = type driven development
• ATTENTION !!! null interdit (checkstyle)
![Page 24: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/24.jpg)
pyramide de test
UI
Intégration
Unitaire
Compilateur
![Page 25: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/25.jpg)
pattern matching
![Page 26: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/26.jpg)
Java 8 introduit la programmation fonctionnelle
![Page 27: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/27.jpg)
peut-on tenter d’y introduire le pattern matching
![Page 28: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/28.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/29.jpg)
ce qu’il faut retenir
![Page 30: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/30.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/31.jpg)
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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/32.jpg)
conclusion
![Page 33: Java8 eXperiment - Normandy JUG](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/33.jpg)
• 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](https://reader031.vdocument.in/reader031/viewer/2022021816/589f39ec1a28ab490c8b4e27/html5/thumbnails/34.jpg)
KEEPCALMAND
THANKYOU