Funkcionální programování (FSI-VFL)

Akademický rok 2026/2027
Garant: Ing. Jiří Kovář, Ph.D.  
Garantující pracoviště: ÚAI všechny předměty garantované tímto pracovištěm
Jazyk výuky: čeština
Typ předmětu: oborový předmět
Cíle předmětu:

Cílem předmětu je seznámit studenty s neimperativními přístupy k řešení problémů a prohloubit jejich znalosti principů metod funkcionálního programování.

Výstupy studia a kompetence:
 
Prerekvizity:

Základní znalosti programování.

Obsah předmětu (anotace):

Tento předmět se zaměřuje na hlubší pochopení principů funkcionálního programování prostřednictvím jazyka F#. Studenti se seznámí s teoretickými základy funkcionálního paradigmatu, jako jsou algebraické datové typy, kompozice funkcí, immutabilita nebo práce s efektivními datovými strukturami, a naučí se tyto koncepty aplikovat při návrhu robustních a bezpečných softwarových systémů. Kurz se věnuje také pokročilejším technikám, mezi které patří pattern matching, funkcionální error-handling, computation expressions či asynchronní a paralelní výpočty, a klade důraz na architektonické zásady typické pro funkcionální svět, jako je separation of concerns či modelování domény pomocí typů. Součástí výuky je nejen teorie, ale i praktická tvorba aplikací, které studenty povedou k porozumění tomu, jak lze funkcionální přístup efektivně využít v moderním softwarovém vývoji.

Metody vyučování:
 
Způsob a kritéria hodnocení:

Hodnocení je založeno na aktivitě studentů v předmětu a obhajobě zadaného projektu.

Vymezení kontrolované výuky a způsob jejího provádění a formy nahrazování zameškané výuky:
 
Typ (způsob) výuky:
    Přednáška  13 × 1 hod. nepovinná                  
    Cvičení s počítačovou podporou  13 × 2 hod. povinná                  
Osnova:
    Přednáška

1. Funkcionální programování v moderním světě
2. Funkce a kompozice jako hlavní stavební kámen
3. Algebraické datové typy – teorie a modelování domén
4. Pattern matching – deterministické řízení toku
5. Higher-order funkce a funkcionální design
6. Kolekce, lazy evaluace a nekonečné struktury
7. Funkcionální error-handling – od teorie k praxi
8. Architekturální principy ve funkcionálním světě
9. Práce se stavem – teorie a praxe
10. Asynchronní a paralelní FP
11. Computation expressions – obecný mechanismus pro abstrakci výpočtů
12. Funkcionální doménový návrh (FDD)
13. Výstavba plně funkcionální architektury

    Cvičení s počítačovou podporou

1. F# v moderním .NET ekosystému
2. Funkcionální jádro: funkce, kompozice a expresivita
3. Pokročilé typy: records, unions, tuples
4. Pattern matching jako základní mechanismus řízení toku
5. Higher-order funkce a funkcionální design
6. Kolekce, sekvence a lazy evaluace
7. Error handling v profesionálních FP aplikacích
8. Moduly, architektura a návrhové vzory ve F#
9. Práce se stavem ve funkcionálních systémech
10. Asynchronní a paralelní funkcionální programování
11. Computation expressions – custom workflow, syntactic sugar
12. Funkcionální doménový návrh (FDD / DDD ve F#)
13. Moderní trendy

Literatura - základní:
1. Abraham, I., F# in Action, 2024,  ISBN 9781633439535 
2.

Sudipta, M.,  F# for Machine Learning Essentials: Get up and running with machine learning with F# in a fun and functional way, 2016,  ISBN-13 : 9781783989348 

3. Luger, G.F.; Stubblefield, W.A. AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java. Addison-Wesley 2008.
Zařazení předmětu ve studijních programech:
Program Forma Obor Spec. Typ ukončení   Kredity     Povinnost     St.     Roč.     Semestr  
C-AKR-P prezenční studium CLS Předměty letního semestru -- kl 4 Volitelný 1 1 L
N-AIŘ-P prezenční studium --- bez specializace -- kl 4 Povinně volitelný 2 2 L