Programowanie w języku Scala 1000-2M25SCA
Po zakończeniu kursu student powinien być w stanie używać Scali do tworzenia prostych, ale praktycznych aplikacji, takich jak np. aplikacja webowa przyjmująca dane od użytkownika, zapisująca je, wyświetlająca oraz umożliwiająca ich modyfikację i usunięcie (inne możliwe przykłady: aplikacja desktopowa, aplikacja na Androida, gra wideo). Powinien znać składnię
Scali, podstawowe pojęcia programowania funkcyjnego oraz ich implementację w Scali, a także potrafić zaplanować i skonfigurować projekt w Scali oraz rozwijać go jako programista pracujący w zespole.
Na zajęciach omówione zostaną między innymi następujące zagadnienia:
1. Składnia Scali: val vs var, kolekcje niemutowalne vs mutowalne, case class, case object, companion object, sealed trait, enum, apply i unapply, dopasowanie wzorców (pattern matching).
2. Główne pojęcia programowania funkcyjnego: funkcje jako dane, niemutowalność, leniwość (lazy evaluation).
3. Główne metody operacji na kolekcjach danych: filter, map, collect, find, collectFirst, flatMap, fold.
4. System kontroli wersji na przykładzie systemu git. Komendy: init, clone, checkout, branch, commit, push. Rozwiązywanie konfliktów za pomocą merge i rebase.
5. Futures, async/await, strumienie zdarzeń, model aktorów, Akka/Pekko.
6. Rekurencja: rekurencja ogonowa (tailrec), trampoliny.
7. Wprowadzenie do debuggera oraz innych funkcji IntelliJ IDEA pomocnych przy refaktoryzacji, uzupełnianiu kodu, testów, itd.
8. Monady: Teoria, obsługa błędów przy użyciu Option/Either/Try, monada IO w Cats Effect.
9. Implicit parameters oraz capabilities.
Koordynatorzy przedmiotu
Rodzaj przedmiotu
Tryb prowadzenia
w sali
Założenia (opisowo)
Efekty kształcenia
1. Znajomość składni i właściwości języka programowania Scala.
2. Znajomość reguł Programowania Funkcyjnego.
3. Doświadczenie w pracy w zespole nad skomplikowanym projektem programistycznym.
Kryteria oceniania
Forma: projekt programistyczny.
Zadaniem studentów będzie sformowanie 3-5 osobowych zespołów programistycznych, a następnie wybór projektu, założenie repozytorium na platformie GitHub i zaimplementowanie wielopoziomowej aplikacji (np. aplikacja webowa, przyjmująca dane od użytkownika, zapisująca je, wyświetlająca oraz umożliwiająca ich modyfikację i usunięcie, aplikacja desktopowa o podobnej strukturze, aplikacja mobilna na system Android, prosta gra komputerowa, itp. Ocenie podlegać będzie nie tylko końcowy efekt, ale również praca zespołowa (podział zadań, komunikacji między członkami zespołu), jakość kodu, oraz obecność i jakość testów. Pośrodku semestru, oraz na ostatnich zajęciach, studenci będą mieli okazję zaprezentować swój projekt.
Literatura
1. “Functional Programming in Scala, Second Edition”, 2023, Michael Pilquist, Rúnar
Bjarnason, and Paul Chiusano (https://www.manning.com/books/functional-programming- in-scala-second-edition)
2. Interaktywny kurs “Functional Programming in Scala”, JetBrains
(https://plugins.jetbrains.com/plugin/23833-functional-programming-in-scala)