Máš pravdu, když to píšu, tak to píšu bez přemýšlení... až na to, že tohle je kód, který je dost důsledně kontroluje, jestli ve zdrojových datech nechybí atributy, jestli to pole "delta" je fakt neprázdné, jestli tam někde nejsou nully.... a teď mi řekni, jak bys to psal v dynamickém jazyku a jak by vypadaly unit testy....
Kdybych to psal v dynamickém jazyku, tak asi proto, abych typy nemusel řešit a poradilo si to s co největší škálou různých (i ne zcela správných) vstupů. Podle toho by vypadaly i jednotkové testy – poslal bych do toho JSON, kde by chyběly položky, místo Intu by tam bylo číslo jako text, text nepřevoditelný na číslo, null…
To by mě zajímalo, proč bys zrovna z těchto důvodů tohle psal v dynamickém jazyku.... kvůli tomu zpracování přece v té výsledné struktuře nakonec stejně chceš "Int" a ne text, a když tam nemá být null, tak stejně musíš kontrolovat, že tam není null...
ale zpět - já fakt nesouhlasím s:
To záleží na kontextu. Pokud se bude pohybovat v kódu, kde bude většina typů non-null, a výjimečně narazí na nullable typ, ošetří to. Pokud bude z venku neustále dostávat nullable typy a použité typy a typový systém ho budou nutit neustále to přetypovávat, bude to dělat automaticky bez přemýšlení.
a řekl bych že výše uvedený příklad ukazuje, že to prostě není pravda.
A ze stejných důvodů nesouhlasím s tímto:
I tenhle typ chyby se bude objevovat u sebelepšího typového systému, protože když programátora nenapadne, že to je zajímavý případ a měl by na to udělat test, nenapadne ho ani ošetřit to v typovém systému.
Protože například u té nullpointerexception je prostě používání "Maybe" typu na úplně jiné úrovni než dávat někam asserty a psát k tomu unit testy. V podstatě je to ekvivalentní těm "model checker" systémům. A dost mi to připomíná toto:
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.