Java Programowanie funkcyjne.pdf

(1371 KB) Pobierz
Tytuł oryginału: Functional Programming in Java: How to improve your Java programs using functional
techniques
Tłumaczenie: Rafał Jońca
ISBN: 978-83-283-3324-6
Original edition copyright © 2017 by Manning Publications Co.
All rights reserved.
Polish edition copyright © 2017 by Helion SA
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były
kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane
z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie
ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji
zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail:
helion@helion.pl
WWW:
http://helion.pl
(księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/javapf.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/javapf
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
Spis tre ci
Przedmowa 13
Podzi kowania 17
O ksi ce 19
Rozdzia 1. Czym jest programowanie funkcyjne?
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
23
Czym jest programowanie funkcyjne? 24
Pisanie u ytecznych programów bez efektów ubocznych 26
W jaki sposób transparentno referencyjna czyni program bezpieczniejszym? 28
Zalety programowania funkcyjnego 28
Wykorzystanie modelu z zast powaniem do rozumowania na temat programu 30
Zastosowanie zasad funkcyjnych na prostym przyk adzie 31
Osi ganie limitów abstrakcji 36
Podsumowanie 37
Rozdzia 2. U ycie funkcji w j zyku Java
2.1.
2.2.
39
2.3.
2.4.
2.5.
2.6.
Czym jest funkcja? 40
2.1.1. Funkcje w wiecie rzeczywistym 40
Funkcje w Javie 45
2.2.1. Metody funkcyjne 45
2.2.2. Interfejsy funkcyjne Javy i klasy anonimowe 50
2.2.3. Z o enie funkcji 52
2.2.4. Funkcje polimorficzne 52
2.2.5. Upraszczanie kodu za pomoc funkcji anonimowych 53
Zaawansowane funkcjonalno ci funkcji 55
2.3.1. Co z funkcjami dotycz cymi kilku argumentów? 56
2.3.2. Zastosowanie funkcji z cz ciowym rozwini ciem 57
2.3.3. Funkcje wy szego rz du 57
2.3.4. Polimorficzne funkcje wy szego rz du 58
2.3.5. U ycie funkcji anonimowych 61
2.3.6. Funkcje lokalne 63
2.3.7. Domkni cia 64
2.3.8. Cz ciowe zastosowanie funkcji i automatyczne rozwijanie 66
2.3.9. Zamiana argumentów cz ciowo zastosowanych funkcji 70
2.3.10. Funkcje rekurencyjne 71
2.3.11. Funkcja to samo ciowa 73
Interfejsy funkcyjne Javy 8 74
Debugging funkcji anonimowych 75
Podsumowanie 78
Kup książkę
Poleć książkę
6
Spis tre ci
Rozdzia 3. Uczyni Jav bardziej funkcyjn
3.1.
3.2.
79
80
3.3.
3.4.
3.5.
Zamiana standardowych struktur steruj cych na ich funkcyjne odpowiedniki
Abstrakcja struktur steruj cych 81
3.2.1. Czyszczenie kodu 85
3.2.2. Alternatywa dla if ... else 88
Abstrakcja iteracji 92
3.3.1. Abstrakcja operacji na li cie dzi ki odwzorowaniu 94
3.3.2. Tworzenie list 95
3.3.3. Wykorzystanie operacji dotycz cych g owy i ogona 96
3.3.4. Funkcyjne dodawanie do listy 97
3.3.5. Redukcja i zwijanie list 97
3.3.6. Kompozycja odwzorowa i mapowanie kompozycji 103
3.3.7. Stosowanie efektów dla list 104
3.3.8. Funkcyjne podej cie do danych wyj ciowych 105
3.3.9. Budowanie list referencji odwrotnych 106
Zastosowanie w a ciwych typów 109
3.4.1. Problemy ze standardowymi typami 109
3.4.2. Definiowanie typów warto ci 112
3.4.3. Przysz o typów warto ci w Javie 115
Podsumowanie 115
Rozdzia 4. Rekurencja, rekurencja odwrotna i memoizacja
4.1.
117
4.2.
4.3.
4.4.
4.5.
Ró nice mi dzy rekurencj i rekurencj odwrotn
118
4.1.1. Przyk ad z dodawaniem dla obu rodzajów rekurencji 118
4.1.2. Implementacja rekurencji w Javie 119
4.1.3. Wykorzystanie eliminacji wywo ania ogonowego 119
4.1.4. U ycie funkcji i metod z rekurencj ogonow
120
4.1.5. Abstrakcja rekurencji 120
4.1.6. Utworzenie wersji zapewniaj cej prost podmian metody rekurencyjnej
bazuj cej na stosie 124
Stosowanie funkcji rekurencyjnych 126
4.2.1. Korzystanie z lokalnie zdefiniowanych funkcji 127
4.2.2. Zapewnienie funkcji dzia aj cych jako rekurencje ogonowe 128
4.2.3. Funkcje podwójnie rekurencyjne — ci g Fibonacciego 128
4.2.4. Zamiana metod dla list na wersje rekurencyjne i bezpieczne dla stosu 131
Kompozycja ogromnej liczby funkcji 134
Korzystanie z memoizacji 137
4.4.1. Memoizacja w programowaniu imperatywnym 137
4.4.2. Memoizacja w funkcjach rekurencyjnych 138
4.4.3. Memoizacja automatyczna 140
Podsumowanie 146
Rozdzia 5. Obs uga danych przy u yciu list
5.1.
147
Jak klasyfikowa kolekcje danych? 147
5.1.1. Ró ne rodzaje list 148
5.1.2. Wzgl dna oczekiwana wydajno listy 149
5.1.3. Wymiana czasu na zaj to pami ci lub czasu kontra z o ono
150
Kup książkę
Poleć książkę
Spis tre ci
5.1.4. Modyfikacja na miejscu 151
5.1.5. Trwa e struktury danych 152
Implementacja niezmiennej, trwa ej listy jednokierunkowej 153
Wspó dzielenie danych w operacjach na li cie 156
5.3.1. Dodatkowe operacje na li cie 158
Wykorzystanie rekurencji do zwijania list za pomoc funkcji wy szego rz du
5.4.1. Bazuj ca na stercie, rekurencyjna wersja foldRight 169
5.4.2. Odwzorowanie i filtrowanie list 171
Podsumowanie 173
7
5.2.
5.3.
5.4.
163
5.5.
Rozdzia 6. Obs uga danych opcjonalnych
6.1.
6.2.
6.3.
175
6.4.
6.5.
6.6.
Problemy ze wska nikiem null 176
Alternatywy dla referencji null 177
Typ danych Option 180
6.3.1. Pobranie warto ci z Option 182
6.3.2. Stosowanie funkcji dla warto ci opcjonalnych 184
6.3.3. Kompozycja obiektów Option 185
6.3.4. Sposoby u ycia Option 187
6.3.5. Inne sposoby czenia opcji 191
6.3.6. Kompozycja List z Option 193
Ró ne narz dzia dodatkowe dla Option 195
6.4.1. Testowanie, czy to Some, czy None 195
6.4.2. Implementacja metod equals i hashcode 195
Jak i gdzie u ywa Option? 196
Podsumowanie 199
Rozdzia 7. Obs uga b dów i wyj tków
7.1.
7.2.
7.3.
7.4.
7.5.
201
7.6.
Problemy do rozwi zania 201
Typ Either 203
7.2.1. Kompozycja klasy Either 204
Typ Result 206
7.3.1. Dodawanie metod do klasy Result 207
Wzorce Result 209
Zaawansowana obs uga Result 216
7.5.1. Stosowanie predykatów 216
7.5.2. Mapowanie pora ek 217
7.5.3. Dodanie metod fabrycznych 220
7.5.4. Stosowanie efektów 221
7.5.5. Zaawansowana kompozycja wyników 224
Podsumowanie 227
Rozdzia 8. Zaawansowana obs uga list
8.1.
Problem z length 230
8.1.1. Problem wydajno ci 230
8.1.2. Zalety memoizacji 231
8.1.3. Wady memoizacji 231
8.1.4. Faktyczna wydajno
233
229
Kup książkę
Poleć książkę
Zgłoś jeśli naruszono regulamin