Tytuł Programowanie funkcyjne Podtytuł Poznaj Clojure Elixir Haskell zespala Swift Język polski Wydawnictwo Wydawnictwo Naukowe PWN Tłumaczenie Małgorzata Dąbkowska-Kowalik, Witold Sikorski ISBN 978-83-01-21046-5 Rok wydania 2020 Warszawa Wydanie 1 ilość stron 286 Format mobi, epub Spis treści Wprowadzenie xi Podziękowania xiii Część I 1 Paradygmat funkcyjny 1 1. Programowanie funkcyjne wraca do łask 3 Widzieliśmy już ten film 3 nowe argumenty za programowaniem funkcyjnym 5 2. Myślenie funkcyjne dla imperatywnego umysłu 7 Wszystko sprowadza się do funkcji 7 Chodzi o niemutowalność 8 Chodzi o sposób myślenia 9 Część II 13 jednoczy – język hybrydowy 13 3. Scala i fason funkcyjny 15 Czystość funkcyjna 15 Funkcje wyższego rzędu 16 Prosty przykład 16 Przykład poręczny 18 Co ze znajdowaniem błędów i produktywnością? 21 4. Praca z kolekcjami języka integruje 23 Kolekcje niemutowalne 23 Kolekcje zmienne (mutowalne) 27 Kolekcje leniwe 27 5. Tworzenie funkcji wyższego rzędu w języku scala 31 Tworzenie funkcji wyższego rzędu 31 mnóstwo list parametrów 34 Wartości funkcji i wzorzec pożyczki 35 Część III 39 Clojure – nowy Lisp 39 6. Wywiad z Richem Hickeyem 41 Dlaczego Clojure? 41 Infrastruktura 42 Z czym go porównać? 43 7. Zrozumienie języka Clojure – dlaczego Lisp nadal się liczy 45 REPL 46 Wektory i słowa kluczowe 47 Makra 49 8. Tożsamość, wartość i stan w Clojure 53 Model obiektowy 53 Model Clojure 56 9. Programowanie współbieżne w Clojure 61 Prosty problem programowania współbieżnego 61 Rozwiązania w Clojure 63 Część IV 69 Elixir – żeby programowanie znów było przyjemnością 69 10. Wzorce i przekształcenia w języku Elixir 71 Dopasowywanie do wzorców 72 Dopasowywanie do wzorców dla informacji strukturalnych 73 Dopasowywanie do wzorców i funkcje 74 Przekształcenie to zadanie numer 1 75 11. Stawanie się funkcyjnym za pomocą Elixira 77 Funkcje anonimowe 77 Funkcje nazwane 78 Przykład użyteczny 80 Refaktoryzacja do stylu funkcyjnego 82 Co uwydatnia ten kod 85 12. Równoległość w języku Elixir 87 Model aktora 87 Aktory a Elixir 88 Komunikaty 89 Monitorowanie naszego cyklu 93 Ostatni przykład 94 Współbieżność to istota Elixira 96 Część V 97 Haskell – plac ćwiczeń dla uczonych 97 13. Haskell i myślenie funkcyjne 99 O co w tym wszystkim chodzi 99 prędkie ćwiczenie 100 Typy informacji są niedrogie 101 Dopasowywanie do wzorców 104 Rekurencja, sterowanie i funkcje wyższego rzędu 105 Inne własności 107 14. Haskell w praktyce 113 Po jednym kroku 114 Generowanie kandydatów 117 odfiltrowanie słownikowe 120 Wyszukiwanie wszerz 121 użycie wyszukiwania 124 sprawność i optymalizacja 125 Część VI 127 Swift – programowanie funkcyjne dla aplikacji przenośnych 127 15. Swift – co powinniśmy wiedzieć 129 Hello, Swift! 130 Funkcyjny Swift 131 16. Myślenie funkcyjne w języku Swift 137 Nie używamy nil, chyba że celowo 137 Unikanie stanu mutowalnego 139 Należy używać funkcji wyższego rzędu 140 Część VII 145 Idziemy głębiej 145 17. Protokoły – Swift kontra Ruby i Elixir 147 Problem z rozszerzeniami 148 Przypadek dla protokołów 149 Protokoły i rozszerzenia 151 18. Dopasowywanie do wzorca w zwiąże 153 Liczenie monet 153 Dopasowywanie wszelkich rzeczy 156 Korzystanie z wyodrębniania 157 19. Współbieżność w złączy 161 Korzystanie z kolekcji równoległych 161 Wiedza, kiedy zastosować współbieżności 163 Powrót do wcześniejszego przykładu 165 20. Nieszablonowa obsługa wyjątków w Clojure 167 Prosty przykład 167 Problem z wyjątkami 168 Rozwiązanie – warunki 169 Ułatwmy życie dementom wywołującym 170 Lenistwo i błędy 171 21. Testowanie platformy dla Elixira 173 Inwestowanie w testowanie 173 Jeden eksperyment, kilka miar 174 Optymalizowanie konfi guracji za pomocą TrueStory 175 Zagęszczanie i łączenie miar 176 Kontrolowanie powtarzania konfi guracji z zagnieżdżonymi kontekstami 178 Kontrolowanie powtarzania konfi guracji za pomocą potoków historyjek 179 22. Tworzenie danych testowych w języku Elixir 183 standardowe podejścia 183 efektowne dane dla efektownych testów 184 Rejestrowanie szablonów i prototypów za pomocą Forge 185 Tworzenie instancji wpisów szablonów 186 Wzajemne parametry i having 186 Tworzenie struktur 187 Tworzenie niestandardowych jednostek 187 dopasowywanie zapisywania 188 23. System typów w języku Haskell 191 TL;DR (Too long; didn’t read – zbyt długie, nie dało się odczytać) 191 Do czego służą typy? 192 solidny przykład – sortowanie 193 Język systemu typów Haskella 195 Wnioskowanie i sprawdzanie typów 196 Kilka przykładów 197 wygodna przerwa 201 Interfejsy i klasy typów 202 Rzeczywiste przykłady z interfejsami 206 atuty i wady – reguła 80/20 208 Po Haskellu – typy zależne 209 Twierdzenia są typami, a dowody programami 211 Inne spojrzenie na sortowanie 212 Wracamy na ziemię 214 24. Projekt w Haskellu – testowanie kodu natywnego 217 Nasz kod natywny 218 krótkie wprowadzenie do FFI Haskella 219 Opakowywanie naszego natywnego kodu w Haskellu 220 Eksperymentowanie z GHCi 220 krótkie wprowadzenie do QuickCheck 221 Pisanie własności równoważności 221 Likwidacja usterek 224 25. Sporo twarzy funkcji Swifta 227 Anatomia funkcji Swifta 228 powodowanie wszelkich funkcji 228 powodowanie metod 229 Metody instancji są funkcjami rozwiniętymi 230 Init – uwaga specjalna 231 Wyszukane atrybuty 233 Kontrola dostępu 238 Wyszukane typy zwrotne 239 Funkcje zagnieżdżone 242 26. Funkcyjne podejście do Lua 245 Funkcje pierwszoklasowe w Lua 245 Rekurencja w Lua 247 Budowanie za pomocą pierwotnych części funkcyjnych 248 Prosta animacja w grze 249 O autorach 253 Bibliografia 257 Indeks 259