POLECAMY
Redakcja:
Wydawca:
Format:
epub, mobi, ibuk
Programowanie funkcyjne jest jednym z głównych paradygmatów programowania. W rozmowach o programowaniu funkcyjnym zawsze pojawiają się określone pojęcia i zagadnienia. Rekurencja. Leniwe obliczenia. Przezroczystość odwołań. Eliminowanie efektów ubocznych. Funkcje jako obiekty pierwszej klasy. Funkcje wyższego poziomu. Rozwijanie (currying). Dopasowywanie wzorców. W książce Programowanie funkcyjne. Poznaj Clojure Elixir Haskell Scala Swift autorzy poruszają wszystkie te zagadnienia, spoglądając na nie z perspektywy pięciu różnych języków programowania.
Ale programowanie funkcyjne to nie jest podejście typu „wszystko albo nic”. Całkiem sensowne jest napisanie kodu imperatywnego, który wykorzystuje niektóre techniki funkcyjne, praktyki i struktury danych. Do przyjęcia jest mieszanie i dopasowywanie stylów, a niektóre języki programowania są wręcz zaprojektowane do budowy hybrydowej, pozwalając na korzystanie ze stylu, który najlepiej pasuje do bieżących potrzeb użytkownkia. W książce Programowanie funkcyjne. Poznaj Clojure Elixir Haskell Scala Swift autorzy analizują te różne podejścia, a czytelnicy sami mogą zdecydować, co im najbardziej pasuje.
Rok wydania | 2020 |
---|---|
Liczba stron | 286 |
Kategoria | Programowanie |
Wydawca | Wydawnictwo Naukowe PWN |
Tłumaczenie | Małgorzata Dąbkowska-Kowalik, Witold Sikorski |
ISBN-13 | 978-83-01-21046-5 |
Numer wydania | 1 |
Język publikacji | polski |
Informacja o sprzedawcy | ePWN sp. z o.o. |
POLECAMY
Ciekawe propozycje
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 | |
Scala – język hybrydowy | 13 |
3. Scala i styl funkcyjny | 15 |
Czystość funkcyjna | 15 |
Funkcje wyższego rzędu | 16 |
Prosty przykład | 16 |
Przykład praktyczny | 18 |
Co ze znajdowaniem błędów i wydajnością? | 21 |
4. Praca z kolekcjami języka Scala | 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 |
Wiele 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 – aby 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 danych 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 praktyczny | 80 |
Refaktoryzacja do stylu funkcyjnego | 82 |
Co wyróżnia ten kod | 85 |
12. Równoległość w języku Elixir | 87 |
Model aktora | 87 |
Aktory a Elixir | 88 |
Komunikaty | 89 |
Monitorowanie naszego procesu | 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 |
Szybkie ćwiczenie | 100 |
Typy danych 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 |
Filtrowanie słownikowe | 120 |
Wyszukiwanie wszerz | 121 |
Użycie wyszukiwania | 124 |
Wydajność i optymalizacja | 125 |
Część VI 127 | |
Swift – programowanie funkcyjne dla aplikacji mobilnych 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 Scali | 153 |
Liczenie monet | 153 |
Dopasowywanie wszystkich rzeczy | 156 |
Korzystanie z wyodrębniania | 157 |
19. Współbieżność w Scali | 161 |
Korzystanie z kolekcji równoległych | 161 |
Wiedza, kiedy użyć współbieżności | 163 |
Powrót do wcześniejszego przykładu | 165 |
20. Wyjątkowa 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 |
Typowe podejścia | 183 |
Piękne dane dla pięknych testów | 184 |
Rejestrowanie szablonów i prototypów za pomocą Forge | 185 |
Tworzenie instancji wpisów szablonów | 186 |
Wzajemne atrybuty i having | 186 |
Tworzenie struktur | 187 |
Tworzenie niestandardowych jednostek | 187 |
Przystosowywanie 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 |
Konkretny 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 |
Zalety 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. Wiele twarzy funkcji Swifta | 227 |
Anatomia funkcji Swifta | 228 |
Wywoływanie wszystkich funkcji | 228 |
Wywoływanie metod | 229 |
Metody instancji są funkcjami rozwiniętymi | 230 |
Init – uwaga specjalna | 231 |
Wyszukane parametry | 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 elementów funkcyjnych | 248 |
Prosta animacja w grze | 249 |
O autorach | 253 |
Bibliografia | 257 |
Indeks | 259 |