Konstruktor a výjimky – Tertium non datur

Měl jsem pochyby. Zvažoval jsem pro a proti. Četl jsem různé články a diskuse na toto téma. Ale již mám jasno.

Konstruktor může v případě potřeby vyhodit výjimku a ukončit tak vytvoření objektu, pokud pro to nejsou splněny základní podmínky. Pěkně to vysvětlil René Stein na Twitteru.

Od toho konstruktory jsou. Konstruktor buď dovolí vznik objektu v legálním stavu, anebo vyhodí výjimku. Tertium non datur (většinou)

Ze světa Lotusscriptu jsem byl zvyklý spíš na Initialize pattern. Objekt se vytvoří ze všech okolností a pak se volá nějaká Init metoda, která vrací true, nebo false. Tak je to nutné ve světě programovacích jazyků, které neznají výjimky. A je to špatný způsob, neboť předpokládá spolupráci programátora, který bude jednou vaše knihovny používat. Dává mu to na výběr – buď zavolá Init, anebo to nechá koňovi a program pak buď proběhne, anebo zbuchne, aniž by dal vědět, proč. V objektovém světě to však funguje s výjimkami lépe.

Ideální pro tento případ je, vzít si příklad ze skutečného světa. Vznikl by automobil, kdyby místo kovu a plastů přišla do fabriky hlína a kamení? Materiál je parametr vznikajícího objektu. Pokud je null, anebo je jiný, než je pro vytvoření objektu potřeba – objekt prostě nevznikne. Místo toho vznikne výjimka – new ArgumentException(“Byl očekáván materiál typu kov a plasty!”).

A stejně jako nevznikne automobil bez kovu a plastů, neměl by vzniknout ani váš objekt, pokud nejsou splněny všechny výchozí podmínky.

Komentování je uzavřeno.