Objekt ktory nie je inicializovany (tj nevalidny) by sa nemal pouzivat. Spajat instanciaciu s inicializaciou je zarabanie si na problemy.
Objekt který je nevalidní by neměl v prvé řadě vůbec existovat.
Naopak. Možnost něčeho takového, tedy oddělovat vytvoření a inicializace objektu je zadělávání si na problémy.
Objekty v nevalidnych stavoch existuju uplne bezne aj po inicializacii v konstruktore. (Nieco sa nepodari tak ako ma, kvoli vonkajsim vplyvom) Taky objekt je mozne zahodit a spustit znova drahy proces instanciacie, alebo je mozne ho znova nakonfigurovat a pustit init metodu. Od smalltalku to tak funguje ze je oddelena instanciacia a inicializacia.
Zavrhov
Požádal bych o lepší argument.
Nekvalitní kód se také objevuje zcela běžně. A důvodem není to, že by to nešlo napsal lépe, ale pouze takové přízemní věci, jako nezkušenost, legaci, good-enought. Domníval jsem se, že se tu bavíme o tom, co je správně, ne o tom, jak se to dá zbastlit.
Pokud se konstruktoru nepodaří vytvořit validní objekt, tak chcípne. Volající má na starost sehnat všechno co konstruktor potřebuje/deklaruje (vnější vliv) aby byl spokojený.
Jestli budeš vytvářet drahý konstruktor, nebo drahou inicializaci, to máš fuk. Toto je obyčejný cargocult. Pokud narážíš na C++, nebo Javu a na alokaci paměti, když se nepovede inicializace, tak máš úplně jiné starosti, než honit bajtíky.
Pohledem do historie můžeme pozorovat, že konstruktor byl vymyšlen právě proto, aby se část alokace (malloc) sloučila s částí inicializací. Nevím, proč bych v moderních jazycích měl psát hůř než v plainC.