27
Funkcijsko programiranje u Javi 8 programiranje u Javi 8 Tomislav Biško

Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Funkcijsko

programiranje u Javi 8programiranje u Javi 8Tomislav Biško

Page 2: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Što je funkcijsko programiranje?

Ke ... ?Ke ... ?Ke ... ?Ke ... ?? ? ?? ? ?? ? ?? ? ?

Ke ... ?Ke ... ?Ke ... ?Ke ... ?

Page 3: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Krenimo redom ...Krenimo redom ...

Page 4: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Funkcijsko ...

public int minFunction (int n1, int n2) {

int min;

if (n1 > n2)

min = n2;min = n2;

else

min = n1;

return min;

}

Page 5: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Funkcijsko, ali ...

Funkcijsko programiranje je programiranje s funkcijama.

Onim matematičkim ...Onim matematičkim ...

Page 6: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Što je funkcija (u matematici)?

Page 7: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Referencijalna

prozirnostprozirnost

(eng. referential transparency)

Page 8: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Potpis funkcije ... da joj je poslovanje transparentno ...

<povratni tippovratni tippovratni tippovratni tip> (<argumentiargumentiargumentiargumenti>) {

...

}

Page 9: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Transparentno poslovanje

programskog kôda

.java .java

ProgramUlazni

argument

Izlazni

rezultat

.java .java

Page 10: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Bez popratnih

efekata

(eng. no side-effects)

Page 11: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Ali, kakva je korist od programa bez

popratnih vrijednosti?

◇ lakše testiranje◇ lakše testiranje

◇ prostor za optimizaciju

◇ i ...

Page 12: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Paralelno

izvršavanje

(eng. Concurrent programming)

Page 13: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Građani

prvog redaprvog reda

(eng. first-class citizens)

Dajmo građanska prava

našim funkcijama!

Page 14: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Što imamo u Javi?

◇ Lambda izraze λ◇ Lambda izraze λ

◇ java.util.function paket

◇ Stream API

Page 15: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Lambda izrazi

u Javi

◇ „anonimne” funkcije

◇ first class functions na Java način

◇ syntactic sugar

Page 16: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Kako je to bilo do sadapackage java.awt.event;

import java.util.EventListener;

public interface ActionListener extends EventListener {

public void actionPerformed(ActionEvent e);

JButton testButton = new JButton("Test Button");

testButton.addActionListener (

new ActionListener() {

@Override public void actionPerformed(ActionEvent ae){

System.out.println("Click Detected by Anon Class");

}

}

);

}

Page 17: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

A kako su nam zasladili

život u Javi 8

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

( Lista argumenata ) ( Lista argumenata ) ( Lista argumenata ) ( Lista argumenata ) ----> { Tijelo funkcije }> { Tijelo funkcije }> { Tijelo funkcije }> { Tijelo funkcije }

(String s) -> {

s = s. toUpperCase();

System.out.println(s);

}

Runnable r2 = () -> System.out.println("Hello world!");

Page 18: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Funkcijska sučelja

◇ java.util.function

◇ Funkcijsko sučelje ima samo jednu apstraktnu metodu

◇ Bilo koje sučelje s jednom apstraktnom metodom je

funkcijsko (eng. SingleAbstractMethod)

Page 19: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

java.util.function

public interface Predicate<T> {

public boolean test (T t);

}

Meet SAM ;)

Page 20: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Predicate<T> i filter()

Stream<T> filter(Predicate<? super T> predicate)

int sum = widgets.stream().filter(w ---->>>> w.getColor() == RED)

.mapToInt(w -> w.getWeight())

.sum();

Page 21: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Stream API

◇ java.util.stream

◇ želimo reći što, a ne kako

◇ za rad na kolekcijama

◇ jednostavna paralelizacija

Page 22: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Stream API

Sadrži funkcije karakteristične za funkcijsko programiranje:

◇ map◇ map

◇ reduce

◇ sorted

◇ forEach

◇ ...

Page 23: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Stream APIList<String> cars = Arrays.asList("Audi", "BMW", " Opel", " Fiat", "Ferrari");

cars.stream()cars.stream()

.filter(s -> s.startsWith("F"))

.map(String::toUpperCase)

.sorted()

.forEach(System.out::println);

Page 24: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Stream API u paraleli

IntStream randomIntegers = (new Random()).ints().limit(500);

randomIntegers.parallel()

.sorted((x, y) -> x - y)

.limit(10)

.toArray();

Page 25: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

“„Nije programski jezik ono što čini

programiranje funkcijskim. –Već način na

“programiranje funkcijskim. –Već način na

koji pišemo naše programe.”

PierrePierrePierrePierre----Yves SaumontYves SaumontYves SaumontYves Saumont

Page 26: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Hvala!PitanjaPitanjaPitanjaPitanja????

Kontakt:

[email protected]

Page 27: Funkcijsko programiranje u Javi 8...Java 8 in Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft Java SE 8 for the really impatient, Cay S. Horstmann Functional Programming

Reference i materijali

◇ Java 8 in Action, Raoul-Gabriel Urma, Mario Java 8 in Action, Raoul-Gabriel Urma, Mario

Fusco, and Alan Mycroft

◇ Java SE 8 for the really impatient, Cay S.

Horstmann

◇ Functional Programming in Java, Pierre-Yves

Saumont