functional programming and java8

13
functional programming and Java 8 Ender Aydın Orak elron.co

Upload: ender-aydin-orak

Post on 16-Apr-2017

256 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Functional Programming and Java8

functional programmingand

Java 8

Ender Aydın Orak elron.co

Page 2: Functional Programming and Java8

“Every problem in computer science can be solved by adding another level of indirection.”

- David Wheeler

Page 3: Functional Programming and Java8

Programming Paradigms

• Machine Code

• Procedural Languages

• Object Oriented Languages

• Functional Languages

• Domain Specific Languages

Page 4: Functional Programming and Java8

What is FP ?

In computer science, functional programming is a programming paradigm—a style of building the structure and elements of computer programs—that treats computation as

the evaluation of mathematical functions and avoids changing-state and mutable data.

Page 5: Functional Programming and Java8

Origins• Lambda Calculus (A.Church, 1930s)

• Combinatory Logic (H.Curry, 1930s)

• LISP (J.McCarthy, 1960s)

• ML (1970s)

• OCaml (1996)

• …

Page 6: Functional Programming and Java8

FP: Why Now ?

• Moore’s Law runs out (in terms of CPU speeds)

• Increasing need for;

• Concurrency & Parallelism

• Distributed Computing

• Scalability

Page 7: Functional Programming and Java8

Benefits of FP

• Concurrency/Parallelism without tears

• Succinct, concise, understandable programming model

• Different programming perspective

• Reusability, testability

• Becoming more accessible

Page 8: Functional Programming and Java8

Functional Languages

• Haskell *

• Clean *

• Lisp/Scheme

• ML/OCaml

• F#

• Erlang

• Java

• Scala

• C++ (11+)

• JavaScript

* Pure

Page 9: Functional Programming and Java8

Sample:

Imperative Approachclass Player { String name; int score; Player(..){..} }

void declareWinner(Player p) { System.out.println(p.name + “ is the winner! ”); }

void winner(Player p1, Player p2) { // Impure if(p1.score > p2.score) declareWinner(p1); else declareWinner(p2); }

winner(new Player(“Ram”, 10), new Player(“John”, 20));

Page 10: Functional Programming and Java8

Sample:

Functional Core + Impure Layersclass Player { String name; int score; Player(..){..} }

void declareWinner(Player p) { System.out.println(p.name + “ is the winner! ”); }

Player maxScore(Player p1, Player p2) { return p1.score > p2.score ? p1 : p2; }

Player winner(Player p1, Player p2) { declareWinner(maxScore(p1, p2)); }

winner(new Player(“Ram”, 10), new Player(“John”, 20));

Page 11: Functional Programming and Java8

Sample:

Reuse

List<Player> players = List(Player("Ram", 10), Player("John", 15), Player("Hari", 20),

Player("Krishna", 17));

System.out.println(players.stream().reduce(Play::maxScore));

Page 12: Functional Programming and Java8

Hands on examples

Ender Aydın Orak elron.co

Page 13: Functional Programming and Java8

Done. (for now)

Ender Aydın Orak elron.co