Scala vs java 8

33
Scala vs Java 8 List("Sarradin", "Armand") .map("François " + _) 2012-12-20

description

Présenté au Paris Scala User Group #28, le 20 décembre 2012

Transcript of Scala vs java 8

Page 1: Scala vs java 8

ScalavsJava 8

List("Sarradin", "Armand") .map("François " + _)

2012-12-20

Page 2: Scala vs java 8

François SarradinXebiaTwitter: @fsarradinBlog: http://kerflyn.wordpress.com/

François ArmandNormation

Twitter: @fanf42

Page 3: Scala vs java 8

Dernier PSUGAvant la fin du monde

Page 4: Scala vs java 8

Pourquoi cette présentation (au PSUG ?)

!!! DISCLAIMER !!!● Pas de troll● Ni monade, ni typeclass● Pas de conflit d'intérêt● Vous avez le droit de parler aux chauffeurs

Page 5: Scala vs java 8

À venir

● Présentation de concepts

● Faire des trucs avec les concepts

● Parler des concepts

Page 6: Scala vs java 8

Java 8

Page 7: Scala vs java 8

Plus de Processeurs

Page 8: Scala vs java 8

Plus d'ExpressivitéPlus de Lisibilité

结果 汉字 = new 物().処理();

vs.

fact n = product [1..n]

Is it all Chinese to you?

Page 9: Scala vs java 8

FP & Concurrence

GuavaClojureC# / F#

C++

Page 10: Scala vs java 8

(Anonymous) Inner ClassUne Solution λ

adults = Iterables.filter(persons, new Predicate<Person>() {

@Overridepublic boolean apply(Person person) {

return person.getAge() >= 18;}

}); // Java + Guava

Page 11: Scala vs java 8

(Anonymous) Inner ClassUne Solution λ

adults = Iterables.filter(persons, new Predicate<Person>() {

@Overridepublic boolean apply(Person person) {

return person.getAge() >= 18;}

}); // Java + Guava

Page 12: Scala vs java 8

(Anonymous) Inner Class(Pas Vraiment) Une Solution λ

Average length of Java one-liner is 21 line!@DEVOPS_BORAT - 12/09/2011

● "The pain of anonymous inner classes makes us roll our eyes in the back of our heads every day." (a wise Oracle's client - 01/2011)

Page 13: Scala vs java 8

Annotation on Types (JSR 308)

Java 8 (JSR 337)

Productivité

Modularité

Performance

Project Jigsaw (JSR ?)

λ Project (JSR 335) Project Coin

(JSR ?)

Date and Time API (JSR 310)

Java 9

Nashorn

Page 14: Scala vs java 8

λ Project (JSR 335)

Virtual Extension

Method

Collection

λ Expression

API Extension

[New]x -> f(x)

[New]Parallel Collections

Type Inference Engine

Enhancement

[New] Interface Methoddefault void m()...

[New]Method ReferenceT::m T::new

obj::m

Change in Property

Inheritance [New]Static Method in

Interface

Page 15: Scala vs java 8

Une Lambda Expression

(int x, int y) -> { return x + y; }

Page 16: Scala vs java 8

Une Lambda Expression

(x, y) -> { return x + y; }

Page 17: Scala vs java 8

Une Lambda Expression

(int x, int y) -> x + y

Scala(x:Int, y:Int) => x + y

Page 18: Scala vs java 8

Une Lambda Expression

(x, y) -> x + y

Scala(x, y) => x + y

Page 19: Scala vs java 8

D'autres formes de λ

m -> {m.put("France", "Paris");m.put("UK", "London");m.put("USA", "Washington");

}

x -> 2 * x

() -> 42

Page 20: Scala vs java 8

Inner Class vs λ Solution

Iterables.filter(persons, new Predicate<Person>() {

@Overridepublic boolean apply(Person p) {

return p.getAge() >= 18;}

}); // Java 5-7 + Guava

Iterables.filter(persons, // Java 8 + Guavaperson -> person.getAge() >= 18);

Page 21: Scala vs java 8
Page 22: Scala vs java 8

λ = SAM(Single Abstract Method)

● Indépendant du type

● Une et une seule méthode abstraite

● Fonctionne avec○ Runnable, Callable, Comparator○ JDK's function API, Guava API○ types persos, ...

Page 23: Scala vs java 8

λ et variables externes

int x = 1;

y -> y + x;

x = 2;

=> Implicitement final

Page 24: Scala vs java 8

Method Reference

String::valueOf// like: v -> String.valueOf(v)

myBigDecimal::add// like: (n) -> myBigDecimal.add(n)

Arrays.sort(myInts, Integer::compare)

String::new// like: v -> new String(v)

Page 25: Scala vs java 8

Virtual Extension Method(VEM)

interface Message {

default String getMessage() {return "Look Ma'! Interface with code!";

}

}

Page 26: Scala vs java 8
Page 27: Scala vs java 8

VEM : Dangereux ?

● Brian Goetz : NON○ Héritage de comportement uniquement

● François Sarradin : OUI O_O'○ Article : "Java 8: Now You Have Mixins?"○ (Voir les kata)

Page 28: Scala vs java 8

Faire évoluer les APIs

● "APIs need a mechanism for evolving, or they will become increasingly constraining to use, and replacing them is expensive." (Brian Goetz - 07/2012)

Page 29: Scala vs java 8

Parallel ComputingAussi simple que 1-2-3 ?

myCollection.parallel().filter(x -> ...).map(x -> ...).reduce((x, y) -> ...) // parallel

myCollection.stream().filter(x -> ...).map(x -> ...).reduce((x, y) -> ...) // sequential

Page 30: Scala vs java 8

The Dream Team ;)

photo: @crazybob

Page 31: Scala vs java 8

Java 8Sites Web

Mercurial repohttp://hg.openjdk.java.net/lambda/lambda

Java SE 8 Early Access (with lambda)http://jdk8.java.net/lambda/

Mailing Listmailto:[email protected]://mail.openjdk.java.net/pipermail/lambda-dev/

Page 32: Scala vs java 8

Et maintenant,scéance de code

in vivo...

Page 33: Scala vs java 8

Questions ?

● Adoption de Java 8 / Scala ?

● Debuggage ?

● Utilisation des Lambda Java 8 en Scala ?