Nowoczesne programowanie w języku Scala
Czas trwania szkolenia:3 dni (24h)
Kod kursu:SCALA/J
Poziom zaawansowania:
O szkoleniu Nowoczesne programowanie w języku Scala
W cenie otrzymasz:
- Materiały szkoleniowe
- Certyfikat ukończenia szkolenia
- W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Dla kogo?
- Programiści zainteresowani budową aplikacji z wykorzystaniem języka i ekosystemu Scala lub tematyką programowania funkcyjnego
Wymagania
- Znajomość programowania obiektowego
- Doświadczenie w programowaniu w języku Java lub innym podobnym
Zalety
- Przekrojowe omawianie zagadnień oraz przykłady oparte o życiowe problemy
- Forma warsztatowa, wiele zadań z przygotowanymi testami, które pozwalają na szybką weryfikację poprawności rozwiązania
- Praktyczna wiedza uwzględniająca zmiany wprowadzone w najnowszych wydaniach Scali
- Poznanie popularnych bibliotek i narzędzi pozwalających tworzyć pełnoprawne aplikacje od zera w języku Scala
Cele szkolenia
- Poznanie możliwości języka Scala, dobrych praktyk programowania oraz polecanych narzędzi i bibliotek, z uwzględnieniem nowości wprowadzonych do Scali 3
- Nabycie umiejętności tworzenia prostych mikroserwisów w języku Scala
Program
Konfiguracja środowiska i pierwszy program
- Interpreter (REPL)
- IDE
- Omówienie podstaw związanych ze stylem kodu w Scali
- Pierwszy program
- Tworzenie i zarządzanie projektem programistycznym przy pomocy Simple Build Tool (SBT)
Podstawy programowania obiektowego w Scali
- Typy standardowe
- Klasy i cechy (traits)
- Obiekty
- Typy opcjonalne
- Dziedziczenie
- Pola mutowalne i niemutowalne
- Kontrola widoczności
- Case class i obiekty towarzyszące
- Enumeracje a algebraiczne typy danych
- Typy generyczne i klasy wariancji
- Inferencja typów
- Union / Intersection Types
- Opaque Types
- Własne operatory
Kolekcje dostępne w Scali oraz podstawy programowania funkcyjnego
- Tablice
- Kolekcje w bibliotece standardowej - listy, zbiory i mapy
- Funkcje wyższego rzędu
- Rozwijanie funkcji (currying)
- Kolekcje mutowalne i niemutowalne
- Zakresy (Range)
- Popularne operacje na kolekcjach (tail, head, zip itp)
Obsługa wyjątków
- W stylu obiektowym (try/catch)
- W stylu funkcyjnym (Try/Success/Failure)
Zagadnienia programowania funkcyjnego
- Instrukcja for - for loop/for comprehension
- Funkcyjne struktury danych
- Monoid / Monada
- Dopasowanie wzorców - Pattern matching
- Dopasowanie warunkowe - Pattern Guards
- Dopasowanie po typie i sealed classes
- Ekstraktory
- Leniwość (lazy val)
Klasy, metody i parametry domniemane (Implicits)
Współbieżność / asynchroniczność
- Wywołania asynchroniczne (futures and promises)
- Kontekst uruchomienia (execution context)
- Strumienie
Metaprogramowanie
- Modyfikator inline
- Przegląd możliwości tworzenia makr
- Adnotacje
- Refleksja
Wytwarzanie aplikacji
- Dołączanie bibliotek do projektu programistycznego
- Integracja z kodem Javy
- Cats - rozszerzenia do programowania funkcyjnego
- ZIO - wsparcie programowania asynchronicznego i współbieżnego typu I/O
- Doobie - funkcyjna nakładka na JDBC
- Integracja biblioteki Jackson w Scali vs biblioteka Circe
- Http4s - budowanie mikroserwisów RESTowych w Scali
Testowanie aplikacji
- ScalaTest, ScalaCheck
- Mockowanie
- ScalaTest DSL
- ScalaTest matchers