PROGRAMOWANIE FUNKCYJNE

Podobne dokumenty
API STREAM WYRAŻENIA LAMBDA

JDK 8 WPROWADZENIE DO WYBRANYCH ZAGADNIEŃ

TYPY GENERYCZNE (GENERICS)

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie w Javie - wykład 14 Podstawy programowania funkcyjnego

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Platformy Programistyczne Zagadnienia sieciowe i wątki

1 Atrybuty i metody klasowe

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Programowanie w Javie wykład 15 Elementy programowania funkcyjnego cd.

Java. Programowanie Obiektowe Mateusz Cicheński

JAVA W SUPER EXPRESOWEJ PIGUŁCE

PROGRAMOWANIE DYNAMICZNE

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Enkapsulacja, dziedziczenie, polimorfizm

Programowanie obiektowe

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Aplikacja wielowątkowa prosty komunikator

Aplikacje w Javie wykład 13 Elementy programowania funkcyjnego

Programowanie obiektowe

Programowanie obiektowe

Współbieżność w środowisku Java

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Strumieniowe bazy danych. Piotr i Paweł

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie obiektowe

Polimorfizm a klasy generyczne w języku Java. Zdzisław Spławski 1

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Aplikacja wielow tkowa prosty komunikator

Przykłady interfejsu TCP i UDP w Javie

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie obiektowe

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie w Ruby

Programowanie w Javie wykład 9 Klasy wewnętrzne, klasy anonimowe Klasy opakowujące

KLASY, INTERFEJSY, ITP

Kontenery i komponenty graficzne

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie współbieżne Laboratorium nr 11

Ćwiczenie 1. Przygotowanie środowiska JAVA

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Programowanie obiektowe

JavaScript funkcyjność

Wprowadzenie do języka Java

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Java: interfejsy i klasy wewnętrzne

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Języki i techniki programowania Ćwiczenia 2

Programowanie obiektowe

Dokumentacja do API Javy.

Programowanie Obiektowe i C++

2. Składnia, środowisko i konwencje w Javie

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Tworzenie aplikacji w języku Java

Programowanie obiektowe

JAVA I SIECI. MATERIAŁY:

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Język Java wątki (streszczenie)

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Programowanie, algorytmy i struktury danych

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Kurs programowania. Wykład 8. Wojciech Macyna

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Platformy Programistyczne Podstawy języka Java

Jak ujarzmić hydrę czyli programowanie równoległe w Javie. dr hab. Piotr Bała, prof. UW ICM Uniwersytet Warszawski

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Wstęp do ruby dla programistów javy

Wykład 6 Dziedziczenie cd., pliki

Aplikacje w Javie- wykład 11 Wątki-podstawy

Tworzenie i wykorzystanie usług

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Definicje klas i obiektów. Tomasz Borzyszkowski

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Programowanie obiektowe

Typy sparametryzowane

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Kolekcje w Javie cz. 1

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Podstawy Programowania

Programowanie obiektowe

Przypomnienie o klasach i obiektach

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Aplikacje w Javie wykład 13 Elementy programowania funkcyjnego

Podstawy otwartych języków programowania Przechowywanie danych

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Wątki w Javie. Piotr Tokarski

WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Podstawy i języki programowania

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Programowanie współbieżne i rozproszone

Transkrypt:

PROGRAMOWANIE FUNKCYJNE ZAGADNIENIA: Funkcje Wyrażenia lambda Strumienie MATERIAŁY: https://fyingbytes.github.io/.../java8-part0.html http://www.oracle.com/technetwork/.../ma14-java-se-8-streams-2177646.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 1

FUNKCJE... Thread t = new Thread(new Runnable() { public void run() { System.out.println("Hello"); } }); t.start();... Thread t = new Thread(()->System.out.println("Hello")); t.start();... Runnable r = ()->System.out.println("Hello"); Thread t = new Thread(r); t.start();... http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 2

FUNKCJE Przykłady defnicji funkcji: () -> {System.out.println("Hello");} // java.lang.runnable x -> {System.out.println(x);} // java.util.function.consumer<t> () -> 7 // java.util.function.supplier<t> Runnable r = ()->{System.out.println("Hello");}; Consumer<Integer> cons = x -> {System.out.println(x);}; Supplier<Integer> sup = () -> 7; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 3

FUNKCJE Inne przykłady: Function<Integer, Integer> inc = x -> x+1; BiFunction<Integer, Integer, Integer> sum = (x,y) -> x+y; Każdą funkcję wieloargumentową można zapisać jako złożenie funkcji jednoargumentowych: Function<Integer, Function<Integer, Integer>> sum1 = x->y->x+y; Funkcja może być argumentem innej funkcji: BiFunction<Function<Integer, Integer>, Integer, Integer> fx = (f, x) -> f.apply(x); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 4

FUNKCJE W programowaniu funkcyjnym funkcje powinny działać zawsze tak samo i nie powinny powodować żednych efektów ubocznych. Podstwowe zasady: wszystkie zmienne są stałe (final), nie ma zmiennych globalnych, funkcje mogą być zarówno argumentami innych funkcji oraz mogą być zwracane jako wynik innych funkcji. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 5

java.util.function Function<T, R> R apply(t t); Function<T, V> andthen(function<? super R,? extends V> after); Function<V, R> compose(function<? super V,? extends T> before); metoda apply() zwraca wartość funkcji, natomiast andthen() oraz compose() zwracają funkcję będącą złożeniem dwóch funkcji. Consumer<T> void accept(t t); Consumer<T> andthen(consumer<? super T> after); metoda accept() wykonuje funkcję, natomiast andthen() zwracaja funkcję będącą złożeniem dwóch funkcji. Supplier<R> R get(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 6

java.util.function Inne (wybrane) interfejsy: Predicate<T> boolean test(t t); Predicate<T> and(predicate<? super T>, other); Predicate<T> or(predicate<? super T>, other); Predicate<T> negate(); Predicate to funkcja, której wynik jest typu boolean public interface UnaryOperator<T> extends Function<T,T> UnaryOperator to funkcja, której wynik jest tego samego typu co argument http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 7

STRUMIENIE Strumienie java.util.stream.stream reprezentuje strumień danych (obiektów) i jest odpowiednikiem kolekcji (java.util.collection) w programowaniu obiektowym Stream<String> objectstream = Stream.of("Ala", "Ola"); String[] array = {"Ala", "Ola"}; Stream<String> arraystream = Arrays.stream(array); W interfejsie Collection istnieje metoda stream() lub parallelstream() przekształcająca kolekcję w strumień. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 8

STRUMIENIE Przetwarzanie danych w strumieniach opiera się na przekształcaniu strumieni I stosowaniu odpowiednich funkcji Stream.of(1, 2, 3) // tworzymy strumień zawierający 1 2 3.map(num -> num * num) // nowy strumień, w którym element // zastępujemy jego drugą potęgą (1 4 9).forEach(System.out::println); // dla każdego elementu strumienia // wywołujemy funkcję która // wypisuje element na ekran System.out::println wskaźnik do funkcji. Równoważnie: num -> System.out.println(num) http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 9

STRUMIENIE List<Integer> list1 = Arrays.asList(1, 2, 3); List<Integer> list2 = Arrays.asList(4, 5, 6); Stream.of(list1, list2).flatmap(list::stream).filter(num -> num % 2 == 0) // Stream<List<Integer>> // Stream<Integer> // zostają liczby parzyste.foreach(system.out::println); // 2 4 6 http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 10

STRUMIENIE String sentence = Stream.of("Hello", "world").collect(collectors.joining(" ")); System.out.println(sentence); // Hello world Integer sum = Stream.of(1, 2, 3).reduce(0, Integer::sum); System.out.println(sum); // 6 http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2017/2018 11

DZIĘKUJĘ ZA UWAGĘ