| Tytuł: | JavaScript dokładniej - dla tych, którzy chcą się zagłębić |
| Kod: | JS-deeper |
| Kategoria: | JavaScript |
| Forma: | 20% wykłady / 80% warsztaty |
| Czas trwania: | 3-4 dni |
| Odbiorcy: | developerzy |
| Zapisy: |
Indywidualne zamówienie i dopasowanie dla grupy. |
| Logistyka: |
W siedzibie klienta lub w innym dowolnym miejscu. |
Wymagania co do znajomości JS zmieniły się przez ostatnie kilka lat.
Pobieżna znajomość języka i API modnego dzisiaj frameworka już nie wystarczą. Poza tym frameworki się zmieniają, a język pozostaje na dłużej. W części praktycznej będziemy robić TDD (Test-Driven Development) najciekawszych ficzerów języka i idiomów, wzbogacone o tworzenie modeli koncepcyjnych, testy wydajnościowe oraz dyskusje grupowe w bezpiecznym środowisku. Dziesiątki bardzo starannie zaprojektowanych ćwiczeń pomoże Ci lepiej poznać tajniki języka i przygotuje do pisania nie tylko prostych aplikacji, ale także reużywalnych bibliotek. Założenie: najlepiej zrozumiesz działanie czegokolwiek, implementując to samemu.
Wyróżniki warsztatu
- Bardzo szczegółowe spojrzenie na język JavaScript
- Porównanie podejścia obiektowego i funkcyjnego w kontekście JS
- Nauka z wykorzystaniem testów jednostkowych zamiast slajdów
Program Warsztatu eksperckiego
Program jest ramą w jakiej możemy się poruszać merytorycznie - program dla konkretnego szkolenia dedykowanego ustalamy z grupą na podstawie analizy przed-szkoleniowej.-
Typy - dlaczego większość porad na temat koercji typów jest zbyt uproszczona- Implementujemy algorytmy konwersji dla operacji takich jak ToBoolean czy ToPrimitive
- Budujemy ogólny model konwersji między typami
- Wyrabiamy intuicję kiedy stosować koercję typów, a kiedy jej unikać
- Budujemy algorytm siedzący pod maską ==
- Dekomponujemy głęboko zagnieżdżone struktury danych z użyciem destrukturyzacji
- Implementujemy algorytmy konwersji dla operacji takich jak ToBoolean czy ToPrimitive
-
Programowanie obiektowe - dlaczego klasyczne OO w JS jest niepotrzebnie skomplikowane- Tworzymy zaawansowane modele koncepcyjne dla programów opartych o funkcje konstruktora/klasy
- Tworzymy zaawansowane modele koncepcyjne dla programów opartych o linkowanie obiektów
- Rozróżniamy pomiędzy: .prototype, [[Prototype]], __proto__
- Poznajemy new i instanceof od podszewki
- Odkrywamy niuanse mixinów z Object.assign()
- Rozpoznajemy sytuacje, w których abstrakcja klasy wycieka
- Tworzymy zaawansowane modele koncepcyjne dla programów opartych o funkcje konstruktora/klasy
-
Funkcje i zasięg widoczności - w pełni wykorzystujemy możliwości, które dają proste funkcje- Budujemy dokładniejszą reprezentację umysłową tego czym tak na prawdę jest hoisting, modelując kontekst wywołania
- Budujemy dokładniejszą reprezentację umysłową funkcyjnego zasięgu widoczności na podstawie stosu kontekstów wywołania
- Wyciągamy niuanse zasięgu blokowego i przyglądamy się sporom na temat użycia const, let i var
- Rozkładamy funkcje na czynniki pierwsze (parametry vs argumenty, domyślne wartości, zmienna liczba argumentów)
- Porównujemy 4 sposoby dynamicznego wiązania this
- Testujemy i porównujemy wydajność i zużycie pamięci kodu opartego o domknięcia i o prototypy
- Szukamy przypadków kiedy nowości z ES6 tj. arrow functions nie powinny być automatycznym zastępstwem dla kodu ES5
- Budujemy dokładniejszą reprezentację umysłową tego czym tak na prawdę jest hoisting, modelując kontekst wywołania
-
Programowanie funkcyjne I - zaczynamy używać pragmatyczne narzędzia programowania funkcyjnego bez doktoratu z matematyki, a Twój kod będzie prostszy i bardziej reużywalny- Implementujemy funkcje wyższego rzędu dostępne w JS (map/filter/reduce/flatMap)
- Implementujemy przydatne funkcje wyższego rzędu niedostępne w JS (np. takeWhile)
- Rozwiązujemy zaawansowane problemy przetwarzania danych z użyciem ciągu funkcji wyższego rzędu
- Optymalizujemy wywołania funkcji z użyciem technik tj. memoization
- Zapobiegamy modyfikacji obiektów przez deepFreeze i wzorce programowania immutable
- Implementujemy funkcje wyższego rzędu dostępne w JS (map/filter/reduce/flatMap)
-
Asynchroniczny JS - zaczniesz świadomie poruszać się w gąszczu opcji zarządzania asynchronicznością w JS- Analizujemy model współbieżności oparty o pętlę zdarzeń
- Znajdujemy problemy z callbackami inne niż zagnieżdżenia
- Budujemy przydatne utilsy dla Promisów: timeout, first, retry
- Używamy async/await aby uzyskać synchronicznie wyglądający kod asynchroniczny
- Implementujemy własną wersję Observable/RxJS aby zrozumieć koncepcję strumieni
- Analizujemy model współbieżności oparty o pętlę zdarzeń
-
Modularność - nowoczesne środowiska JS nie potrzebują hacków do pisania modularnego kodu- Analizujemy kod programu opartego o wzorce Revealing Module oraz Dependency Injection
- Używamy natywnych modułów ES6 w Node.js i w przeglądarce bez dodatkowych narzędzi
- Implementujemy własny Event Emitter aby lepiej zrozumieć wzorzec Observer
- Porównujemy wzorce komunikacji oparte o orkiestrację i choreografię
- Analizujemy kod programu opartego o wzorce Revealing Module oraz Dependency Injection
-
Programowanie funkcyjne II - rozrywka intelektualna dla fanów programowania funkcyjnego- Poznajemy różnice pomiędzy partial application i currying
- Zastępujemy obiektowe Dependency Injection z konstruktorami, funkcyjnym Dependency Injection z curry
- Poznajemy wady i zalety stylu programowania point-free
- Budujemy abstrakcje do łączenia funkcji w użyteczne bloki: compose i pipe
- Aplikujemy Funktory i Monady do rozwiązywania praktycznych problemów
- Zastępujemy null/undefined komponowalnym Maybe
- Poznajemy różnice pomiędzy partial application i currying
-
Metaprogramowanie - wzbogacamy możliwości języka- Dodajemy możliwość iterowania po obiektach
- Budujemy bardziej wszechstronną wersję async/await z użyciem generatorów
- Wzbogacamy możliwości języka z użyciem Proxy
- Budujemy własny DSL z użyciem tagged template literals
- Dodajemy możliwość iterowania po obiektach
Pobierz program w formacie PDF
Trenerzy
Poznaj ekspertów, którzy mogą poprowadzić Twój Warsztat.