"Programowanie funkcyjne"
Identyfikator Librowy: 216843
Spis treści
Wprowadzenie 12
Podziękowania 14
Część I 16
Paradygmat funkcyjny 16
1. Programowanie funkcyjne wraca do łask 18
Widzieliśmy już ten film 18
Nowe argumenty za programowaniem funkcyjnym 20
2. Myślenie funkcyjne dla imperatywnego umysłu 22
Wszystko sprowadza się do funkcji 22
Chodzi o niemutowalność 23
Chodzi o sposób myślenia 24
Część II 28
Scala – język hybrydowy 28
3. Scala i styl funkcyjny 30
Czystość funkcyjna 30
Funkcje wyższego rzędu 31
Prosty przykład 31
Przykład praktyczny 33
Co ze znajdowaniem błędów i wydajnością? 36
4. Praca z kolekcjami języka Scala 38
Kolekcje niemutowalne 38
Kolekcje leniwe 42
Kolekcje zmienne (mutowalne) 42
5. Tworzenie funkcji wyższego rzędu w języku Scala 46
Tworzenie funkcji wyższego rzędu 46
Wiele list parametrów 49
Wartości funkcji i wzorzec pożyczki 50
Clojure – nowy Lisp 54
Część III 54
6. Wywiad z Richem Hickeyem 56
Dlaczego Clojure? 56
Infrastruktura 57
Z czym go porównać? 58
7. Zrozumienie języka Clojure – dlaczego Lisp nadal się liczy 60
REPL 61
Wektory i słowa kluczowe 62
Makra 64
8. Tożsamość, wartość i stan w Clojure 68
Model obiektowy 68
Model Clojure 71
9. Programowanie współbieżne w Clojure 76
Prosty problem programowania współbieżnego 76
Rozwiązania w Clojure 78
Część IV 84
Elixir – aby programowanie znów było przyjemnością 84
10. Wzorce i przekształcenia w języku Elixir 86
Dopasowywanie do wzorców 87
Dopasowywanie do wzorców dla danych strukturalnych 88
Dopasowywanie do wzorców i funkcje 89
Przekształcenie to zadanie numer 1 90
11. Stawanie się funkcyjnym za pomocą Elixira 92
Funkcje anonimowe 92
Funkcje nazwane 93
Przykład praktyczny 95
Refaktoryzacja do stylu funkcyjnego 97
Co wyróżnia ten kod 100
12. Równoległość w języku Elixir 102
Model aktora 102
Aktory a Elixir 103
Komunikaty 104
Monitorowanie naszego procesu 108
Ostatni przykład 109
Współbieżność to istota Elixira 111
Część V 112
Haskell – plac ćwiczeń dla uczonych 112
13. Haskell i myślenie funkcyjne 114
O co w tym wszystkim chodzi 114
Szybkie ćwiczenie 115
Typy danych są niedrogie 116
Dopasowywanie do wzorców 119
Rekurencja, sterowanie i funkcje wyższego rzędu 120
Inne własności 122
14. Haskell w praktyce 128
Po jednym kroku 129
Generowanie kandydatów 132
Filtrowanie słownikowe 135
Wyszukiwanie wszerz 136
Użycie wyszukiwania 139
Wydajność i optymalizacja 140
Część VI 142
Swift – programowanie funkcyjne dla aplikacji mobilnych 142
15. Swift – co powinniśmy wiedzieć 144
Hello, Swift! 145
Funkcyjny Swift 146
16. Myślenie funkcyjne w języku Swift 152
Nie używamy nil, chyba że celowo 152
Unikanie stanu mutowalnego 154
Należy używać funkcji wyższego rzędu 155
Część VII 160
Idziemy głębiej 160
17. Protokoły – Swift kontra Ruby i Elixir 162
Problem z rozszerzeniami 163
Przypadek dla protokołów 164
Protokoły i rozszerzenia 166
18. Dopasowywanie do wzorca w Scali 168
Liczenie monet 168
Dopasowywanie wszystkich rzeczy 171
Korzystanie z wyodrębniania 172
19. Współbieżność w Scali 176
Korzystanie z kolekcji równoległych 176
Wiedza, kiedy użyć współbieżności 178
Powrót do wcześniejszego przykładu 180
20. Wyjątkowa obsługa wyjątków w Clojure 182
Prosty przykład 182
Problem z wyjątkami 183
Rozwiązanie – warunki 184
Ułatwmy życie dementom wywołującym 185
Lenistwo i błędy 186
21. Testowanie platformy dla Elixira 188
Inwestowanie w testowanie 188
Jeden eksperyment, kilka miar 189
Optymalizowanie konfi guracji za pomocą TrueStory 190
Zagęszczanie i łączenie miar 191
Kontrolowanie powtarzania konfi guracji z zagnieżdżonymi kontekstami 193
Kontrolowanie powtarzania konfi guracji za pomocą potoków historyjek 194
22. Tworzenie danych testowych w języku Elixir 198
Typowe podejścia 198
Piękne dane dla pięknych testów 199
Rejestrowanie szablonów i prototypów za pomocą Forge 200
Tworzenie instancji wpisów szablonów 201
Wzajemne atrybuty i having 201
Tworzenie niestandardowych jednostek 202
Tworzenie struktur 202
Przystosowywanie zapisywania 203
23. System typów w języku Haskell 206
TL;DR (Too long; didn’t read – zbyt długie, nie dało się odczytać) 206
Do czego służą typy? 207
Konkretny przykład – sortowanie 208
Język systemu typów Haskella 210
Wnioskowanie i sprawdzanie typów 211
Kilka przykładów 212
Wygodna przerwa 216
Interfejsy i klasy typów 217
Rzeczywiste przykłady z interfejsami 221
Zalety i wady – reguła 80/20 223
Po Haskellu – typy zależne 224
Twierdzenia są typami, a dowody programami 226
Inne spojrzenie na sortowanie 227
Wracamy na ziemię 229
24. Projekt w Haskellu – testowanie kodu natywnego 232
Nasz kod natywny 233
Krótkie wprowadzenie do FFI Haskella 234
Eksperymentowanie z GHCi 235
Opakowywanie naszego natywnego kodu w Haskellu 235
Krótkie wprowadzenie do QuickCheck 236
Pisanie własności równoważności 236
Likwidacja usterek 239
25. Wiele twarzy funkcji Swifta 242
Anatomia funkcji Swifta 243
Wywoływanie wszystkich funkcji 243
Wywoływanie metod 244
Metody instancji są funkcjami rozwiniętymi 245
Init – uwaga specjalna 246
Wyszukane parametry 248
Kontrola dostępu 253
Wyszukane typy zwrotne 254
Funkcje zagnieżdżone 257
26. Funkcyjne podejście do Lua 260
Funkcje pierwszoklasowe w Lua 260
Rekurencja w Lua 262
Budowanie za pomocą pierwotnych elementów funkcyjnych 263
Prosta animacja w grze 264
O autorach 268
Bibliografia 272
Indeks 274