Funkcyjne programowanie w JavaScript
LICZBA DNI: 2 (16h)
KOD KURSU: FP/JS
O szkoleniu
DLA KOGO?
Programiści chcący poszerzyć swoje kompetencje o zrozumienie funkcyjnego paradygmatu w JavaScript wraz z umiejętnością jego wykorzystania
WYMAGANIA
Umiejętność podstawowego programowania w JavaScript. Podstawowe koncepty t.j. pętle, if-else, funkcje, zmienne, dane (obiekty, arrays), itp. nie powinny być Ci obce :)
ZALETY
Warsztatowy charakter zajęć
Teoretyczna i praktyczna wiedza dotycząca funkcyjnego programowania, którą dalej można aplikować do języków funkcyjnych (również backendowych), jak i innych języków z wbudowanymi elementami paradygmatu funkcyjnego (np. Python, Ruby, Java)
Budowa kilku projektów/aplikacji
Ćwiczenia pomagające utrwalić omawiane koncepty
Cele szkolenia
Poznanie paradygmatu funkcyjnego programowania w JavaScripcie, jego użyteczność i wartość w pisaniu bardziej bezpiecznych, łatwiejszych w testowaniu i utrzymaniu, nowoczesnych aplikacji
Program
Wprowadzenie
- Czym jest JavaScript (JS) w kontekście Funkcyjnego Programowania (FP)?
- Jakie są benefity pisania kodu w stylu FP?
- Oduczenie się OOP i imperatywnego kodowania
- Po co?
- I jak?
- Funkcyjne alternatywy dla JavaScript
- Elm
- ReasonML
- Purescript
- Biblioteki pomagające używania FP w JS
- RamdaJS
- ImmutableJS
- Inne
Wprowadzenie do funkcyjnego programowania
- Czyste funkcje
- Niezmienność danych
- Funkcje wyższego rzędu oraz funkcje jako first class citizens
- Deklaratywny, a imperatywny styl kodowania
- Kolekcje
- Typowe operacje na kolekcjach z użyciem core API (map, filter, find, etc.)
- Typowe operacje na kolekcjach z użyciem biblioteki RamdaJS (head, tail, all, any, includes, etc.)
- Operator pipeline
- Kompozycja funkcji
Przygotowanie do ćwiczeń
- Przykładowe użycia
- Z core API
- Z RamdaJS
- Przydatne narzędzia wbudowane w JS (np. arrow functions, spread operator)
Ćwiczenia
- Stosowanie podstawowych konceptów FP w JS (włączając bibliotekę RamdaJS)
- Praca na kolekcjach
- Czyste funkcje
- Niemutowalność danych
- Funkcje pierwszej kategorii
Bardziej zaawansowane koncepty funkcyjnego programowania
- Currying
- Partial application
- (Tail) Recursion
Ćwiczenia
- Zastosowanie bardziej zaawansowanych konceptów używając RamdaJS
Wykorzystanie mainstreamowe FP
- React
- Brak mutacji
- Deklaratywny kod
- Małe, najlepiej czyste, funkcje
- Funkcyjne komponenty
- Redux
- Redux zainspirowany Architekturą Elm z języka Elm
- Model, Update, i View
- Niemutowalny stan aplikacji
- Jak zmieniać stan, gdy mutowalność nie jest opcją
Ćwiczenia
- Proste aplikacje w vanilla JS z użyciem RamdaJS i [opcjonalnie] innych bibliotek (np. ImmutableJS)
- Wyświetlanie dynamicznie renderowanych list HTMLowych
- Licznik
- Formy z użyciem wzoru Model-View-Update
- Aplikacje wykorzystujące poznane koncepty i zastosowania FP z użyciem React lub React+Redux
- Wyświetlanie dynamicznie renderowanych list HTMLowych
- Licznik
- Formy z użyciem wzoru Model-View-Update
Task: Napisz małą aplikację na dowolny temat, która rozwiązuje jeden problem korzystając ze świeżo poznanych konceptów FP
- Do wyboru będzie albo własny pomysł na aplikację, albo skorzystanie z zasugerowanych appek
- Opcjonalna prezentacja swojej appki innym z wyjaśnieniem wyborów architekturalnych z punkt widzenia funkcyjnego programisty
Co dalej?
- Przydatne linki
- Refactoring aplikacji jest łatwy, jeśli piszemy czyste funkcje
- Testy jednostkowe, gdy stosujemy zasady FP
- Możliwe 'branchnięcie się' z funkcyjnego programowania do reaktywnie-funkcyjnego (np. z biblioteką RxJS)
