Over si svoje vedomosti z kapitoly o sealed triedach. Klikni na Áno alebo Nie - tlačidlo sa hneď zafarbí (zelená = správne, červená = nesprávne) a zobrazí sa komentár s vysvetlením. Otázky prechádzaš po jednej pomocou tlačidiel nižšie.
Otázka 1 / 11
Sealed trieda má obmedzenú (uzavretú) množinu podtried.
Áno. Kompilátor pozná všetky možné podtriedy, čo je užitočné najmä pri spracovaní stavov pomocou when.
Všetky priame podtriedy sealed triedy musia byť definované v rovnakom balíku (package).
Áno. Toto obmedzenie zaručuje, že kompilátor vždy pozná kompletný zoznam podtried.
Pri použití výrazu when nad sealed triedou musíme vždy pridať vetvu else, inak sa kód neskompiluje.
Nie. Keďže when nad sealed triedou je exhaustive (úplný), else vetvu nepotrebujeme, ak ošetríme všetky podtriedy.
Ak v when nad sealed triedou zabudneme na jednu z podtried a neuvedieme ani else, kompilátor nás na to upozorní.
Áno. Práve toto je jedna z hlavných výhod sealed tried - kompilátor kontroluje, či sme ošetrili všetky možnosti.
Na rozdiel od enum, každá podtrieda sealed triedy môže mať vlastné atribúty a rozdielnu štruktúru dát.
Áno. Napríklad podtrieda Result.Success(val data: String) nesie vlastné dáta, čo pri jednoduchom enum nie je možné.
enum class je vo všeobecnosti flexibilnejšia a výkonnejšia možnosť ako sealed trieda pri reprezentácii stavov s rôznymi dátami.
Nie. Je to naopak - sealed triedy sú flexibilnejšie, keďže každá podtrieda môže mať vlastné dáta a správanie, čo enum neumožňuje.
data object sa v sealed triede používa pre podtriedy, ktoré nenesú žiadne dodatočné dáta (napr. Loading).
Áno. data object Loading : Result() reprezentuje jediný stav bez potreby vytvárať viacero inštancií.
Kontrola typu pomocou is, napríklad is Result.Success, sa v when nad sealed triedou používa na rozlíšenie konkrétnej podtriedy.
Áno. Vetva is Result.Success -> ... zároveň umožňuje pristupovať k dátam danej podtriedy (smart cast).
Sealed triedy môžu byť definované len ako vnorené triedy - na vrchnej úrovni súboru ich definovať nemožno.
Nie. Toto obmedzenie platilo pred Kotlin 1.5 - odvtedy môžu byť sealed triedy definované aj priamo na vrchnej úrovni súboru.
Sealed triedy sú vhodné na reprezentáciu konečnej (finitnej) množiny možných stavov, napríklad výsledku sieťovej požiadavky.
Áno. Typický príklad je Loading, Success a Error ako tri jasne definované stavy.
Sealed trieda samotná (napr. Result) nemôže byť priamo instanciovaná, podobne ako abstraktná trieda.
Áno. Vytvárať môžeme len inštancie jej konkrétnych podtried, napríklad Result.Success("Hello").
Tvoje skóre je 0 / 11