Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al?...

36
Functial Proamming with Eclipse Sebastian Zarnekow itemis Embrace Java8

Transcript of Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al?...

Page 1: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Functional Programmingwith Eclipse

Sebastian Zarnekow itemis

Embrace Java8

Page 2: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Why functional?

Page 3: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Demo

Page 4: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Imperative Programming is about How to do it

Page 5: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Functional Programming focusses onWhat to do

Page 6: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Mutationvs

Transformation

Page 7: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Java Meets

Immutability

Page 8: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

equals() hashCode()

toString() <ctor>()

final fields clone()

copy ctor

Page 9: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

AutoValue Lombok

Page 10: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses
Page 11: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Pureness

Page 12: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

No Side Effects Referential Transparency Caching & Memoization

Page 13: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Lazy EvaluationComposition

and

Page 14: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Use Small Atomic Pieces Assemble Rich Behavior cf. Pipes & Filters

Page 15: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

BehaviorParameterization

Page 16: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Groceries:10 Eggs Milk Bread Butter

Page 17: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Houseworkhoover yr room go with the dog

Page 18: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Houseworkhoover yr room go with the dog Pass Behavior / Instructions Around

Code is Data cf. Strategy Pattern

Page 19: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Separation of Concerns

Page 20: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

https://twitter.com/mariofusco/status/572332914895134720/photo/1

Page 21: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

LambdasStreams

and

Page 22: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses
Page 23: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

• 2006 - “We’ll never have lambdas in Java”(James Gosling)

• 2007 - 3 Different Proposals for Lambdas

• 2008 - “We’ll never have lambdas in Java”(Mark Reinhold, Devoxx)

• 2009 - Project Lambda is Alive (JSR 335)(Mark Reinhold, Devoxx)

History Lesson (Credits to Mario Fusco, Codemotion)

Page 24: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

λ

Page 25: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Syntaxs -> s.length()

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

() -> 42

λ

Page 26: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Syntaxλ(x, y, z) -> { if (y == z) return x; else { int result = y; for (int i = 1; i < z; i++) result *= i; return result; } }

Page 27: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Method References

String::length System::getProperty super::toString ArrayList::new double[]::new "abc"::length System.out::println

Page 28: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Method References

ArrayList::new new ArrayList<>(5) new ArrayList<>(myCollection) new ArrayList<>()

Poly Expressions

Page 29: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

• Implementations in Interfaces

• Default Methods

• Static Methods

• Only Behavior is Inherited

• Backwards Compatible

Interface Evolution

Page 30: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

List.replaceAll(UnaryOperator) List.sort(Comparator)

Collection.removeIf(Predicate)

Iterable.forEach(Consumer)

API Evolution

Page 31: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

StreamsStreams [..] are [..] concerned with declaratively describing their source and the computational operations which will be performed in aggregate on that source

myListOfStrings.stream() .filter(s -> s != null) .mapToInt(String::length) .sum();

Page 32: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Streams

Stream<T> IntStream LongStream DoubleStream

Page 33: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Streams (2)

Intermediate Operations Terminal Operations

Page 34: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

Collection.stream() Collection.parallelStream()

API Evolution (2)

Page 35: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

API

Syntax

VM

Page 36: Embrace Java8 - EclipseCon 2020 › ... › Java8Tutorial.pdf · Embrace Java8. Why functi!al? Demo. Imperative Programming is about How to do it. Functional Programming focusses

github.com/szarnekow/Java8TutorialExercises @ GitHub