who's more functional: kotlin, groovy, scala, or java?

67
Groovy, Kotlin, Scala or Java? Andrey Breslav Who's More Functional 1 Wednesday, October 3, 12

Upload: andrey-breslav

Post on 15-Jan-2015

4.088 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Groovy, Kotlin, Scala or Java?

Andrey Breslav

Who's More Functional

1Wednesday, October 3, 12

Page 2: Who's More Functional: Kotlin, Groovy, Scala, or Java?

About Me

• Project lead of Kotlin ➡ at JetBrains since 2010

• EG member of JSR-335➡ Project Lambda

2

Andrey Breslav

2Wednesday, October 3, 12

Page 3: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Prologue

3

3Wednesday, October 3, 12

Page 4: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Prologue– Dad (or Mom), is Java a

functional language?

3

3Wednesday, October 3, 12

Page 5: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Prologue– Dad (or Mom), is Java a

functional language?

– Don't you know your dad from your mom?!

3

3Wednesday, October 3, 12

Page 6: Who's More Functional: Kotlin, Groovy, Scala, or Java?

What is FP like?

4Wednesday, October 3, 12

Page 7: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌

5Wednesday, October 3, 12

Page 8: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌1946

5Wednesday, October 3, 12

Page 9: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌1946

5Wednesday, October 3, 12

Page 10: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌1946 1956

5Wednesday, October 3, 12

Page 11: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌1946 1956

John Backus

5Wednesday, October 3, 12

Page 12: Who's More Functional: Kotlin, Groovy, Scala, or Java?

5

Alonzo Church

1936

𝛌1946 19761956

John Backus

Can Programming be Liberated from the von Neumann Style?

5Wednesday, October 3, 12

Page 13: Who's More Functional: Kotlin, Groovy, Scala, or Java?

6

6Wednesday, October 3, 12

Page 14: Who's More Functional: Kotlin, Groovy, Scala, or Java?

– Dad, what's good about FP?

6

6Wednesday, October 3, 12

Page 15: Who's More Functional: Kotlin, Groovy, Scala, or Java?

– Dad, what's good about FP?

– It makes you look smart

6

6Wednesday, October 3, 12

Page 16: Who's More Functional: Kotlin, Groovy, Scala, or Java?

– Dad, what's good about FP?

– It makes you look smart

– Like wearing glasses?

6

6Wednesday, October 3, 12

Page 17: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effects (Mutability)

7

John von Neumann

State

com

man

ds

𝛌

f(g(x), y)VS

Inputs

Outputs

7Wednesday, October 3, 12

Page 18: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

8Wednesday, October 3, 12

Page 19: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

8Wednesday, October 3, 12

Page 20: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

Are you functional?

Groovy

Scala

Java 8

Kotlin

Recursion

V

V

V

V

8Wednesday, October 3, 12

Page 21: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

8Wednesday, October 3, 12

Page 22: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

8Wednesday, October 3, 12

Page 23: Who's More Functional: Kotlin, Groovy, Scala, or Java?

1, 1, 2, 3, 5, 8, 13, 21, 34, ...

Leonardo Fibonacci

State

com

man

ds

9Wednesday, October 3, 12

Page 24: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

10

10Wednesday, October 3, 12

Page 25: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

10

10Wednesday, October 3, 12

Page 26: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

– Dad, how do I

10

10Wednesday, October 3, 12

Page 27: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

– Dad, how do I

- print("Hello")?

10

10Wednesday, October 3, 12

Page 28: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

– Dad, how do I

- print("Hello")?

- write to a file?

10

10Wednesday, October 3, 12

Page 29: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

– Dad, how do I

- print("Hello")?

- write to a file?

- do both?

10

10Wednesday, October 3, 12

Page 30: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Effect-Free

– Dad, how do I

- print("Hello")?

- write to a file?

- do both?

10

Are you functional?

Groovy

Scala

Java 8

Kotlin

Recursion

V

V

V

V

X

X

Pure

X

X

10Wednesday, October 3, 12

Page 31: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Summary

• FP makes things simpler

• Sometimes at a huge price

• Our languages are not purely functional

11

11Wednesday, October 3, 12

Page 32: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Higher OrderFP brings order :)

12Wednesday, October 3, 12

Page 33: Who's More Functional: Kotlin, Groovy, Scala, or Java?

FibonacciTest

13

13Wednesday, October 3, 12

Page 34: Who's More Functional: Kotlin, Groovy, Scala, or Java?

FibonacciTest

13

– How do I test both implementations?

13Wednesday, October 3, 12

Page 35: Who's More Functional: Kotlin, Groovy, Scala, or Java?

test(f)

14

14Wednesday, October 3, 12

Page 36: Who's More Functional: Kotlin, Groovy, Scala, or Java?

test(f)

14

Are you functional?

Groovy

Scala

Java 8

Kotlin

Recursion

V

V

V

V

X

X

Pure

X

X

V

V

V

V

HO

14Wednesday, October 3, 12

Page 37: Who's More Functional: Kotlin, Groovy, Scala, or Java?

GoF and FP

15

Strategy

Command Observer AbstractFactory

State Visitor

= Higher-Order

Function

15Wednesday, October 3, 12

Page 38: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

16Wednesday, October 3, 12

Page 39: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

16Wednesday, October 3, 12

Page 40: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

users: ParallelCollection

16Wednesday, October 3, 12

Page 41: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

users: ParallelCollection

16Wednesday, October 3, 12

Page 42: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

users: ParallelCollection

16Wednesday, October 3, 12

Page 43: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

users: ParallelCollection

16Wednesday, October 3, 12

Page 44: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Internal Iteration

16

users: ArrayList

user 1

user 2

user 3

user 4

Hello

Hello

Hello

Hello

users: ParallelCollection

16Wednesday, October 3, 12

Page 45: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Summary

• Good old callbacks/strategies

• Very important abstraction

17

17Wednesday, October 3, 12

Page 46: Who's More Functional: Kotlin, Groovy, Scala, or Java?

ADTWhat is your "A" for?

18Wednesday, October 3, 12

Page 47: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Example: Messages

19

Server Client

19Wednesday, October 3, 12

Page 48: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Example: Messages

19

Server Clientsearch for "lambda"

19Wednesday, October 3, 12

Page 49: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Example: Messages

19

Server Clientsearch for "lambda"

exact match at ...

19Wednesday, October 3, 12

Page 50: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Example: Messages

19

Server Clientsearch for "lambda"

exact match at ...

similarity at ...

19Wednesday, October 3, 12

Page 51: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Example: Messages

19

message ::= search for term | exact item | similar item

Server Clientsearch for "lambda"

exact match at ...

similarity at ...

19Wednesday, October 3, 12

Page 52: Who's More Functional: Kotlin, Groovy, Scala, or Java?

20

ADT

Algebraicdata type

Abstractdata type

~ Interface

~ Data class

20Wednesday, October 3, 12

Page 53: Who's More Functional: Kotlin, Groovy, Scala, or Java?

20

ADT

Algebraicdata type

Abstractdata type

~ Interface

~ Data class

Are you functional?

Groovy

Scala

Java 8

Kotlin

Recursion

V

V

V

V

X

X

Pure

X

X

V

V

V

V

HO

V

V

V

V

ADT

20Wednesday, October 3, 12

Page 54: Who's More Functional: Kotlin, Groovy, Scala, or Java?

ADT in Kotlin

21

21Wednesday, October 3, 12

Page 55: Who's More Functional: Kotlin, Groovy, Scala, or Java?

UtilizationYou may have your cake, but can you eat it too?

22Wednesday, October 3, 12

Page 56: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Up to 5 HO-functions for free!

Upgrade

for

more

23Wednesday, October 3, 12

Page 57: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Static Utility Methods

24

backwards!

24Wednesday, October 3, 12

Page 58: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Static Utility Methods

24

backwards!

as opposed to

24Wednesday, October 3, 12

Page 59: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Extension Functions

25

25Wednesday, October 3, 12

Page 60: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Extension Functions

25

Receiver Type

25Wednesday, October 3, 12

Page 61: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Extension Functions

25

Receiver Type

receiver

25Wednesday, October 3, 12

Page 62: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Summary

• Extending existing types

• Without changing the classes

26

26Wednesday, October 3, 12

Page 63: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Epilogue

27Wednesday, October 3, 12

Page 64: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Epilogue– Dad, should I use FP?

27Wednesday, October 3, 12

Page 65: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Epilogue– Dad, should I use FP?

– What is your problem?!

27Wednesday, October 3, 12

Page 66: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Epilogue– Dad, should I use FP?

– What is your problem?!

P.S. Kotlin is cool :) http://kotlin.jetbrains.org27Wednesday, October 3, 12

Page 67: Who's More Functional: Kotlin, Groovy, Scala, or Java?

Kotlin Resources

• Docs: http://kotlin.jetbrains.org

• Demo: http://kotlin-demo.jetbrains.com

• Code: http://github.com/jetbrains/kotlin

• Twitter:➡ @project_kotlin

➡ @abreslav

28

28Wednesday, October 3, 12