Nevim, v jakem jazyce to resis, tak to popisu, jak to je v Jave, ale jinde to bude podobne. A predpokladam, ze nechavame stranou asserce v testech.
Asserce jsou poor man's design by contract. Muzes v nich popsat jake jsou predpoklady danych kusu kodu (tenhle parametr neni nula...) a co se jsou vlastnosti jeho vysledku (vraci se neprazdny seznam...). V Jave jsou udelane tak, ze pokud neni asserce splnena (a asserce jsou povolene), tak vylitne vyjimka. Takze ani s assercemi se vyjimek nezbavis, jen
- mas hezci zapis
- mas urcene, co ti vyleti
Casto se asserce pouzivaji pri vyvoji a testovani, na produkci jsou vypnute (t.j. pokracuje se v krasojizde i kdyz nekdo porusil kontrakt, bozi at nas chrani pred nasledky). Ze to je dobra metoda, to bych si netroufal tvrdit.
V poslednim odstavci mas vicemene pravdu - vstup od cizich mas kontrolovat a v definovanych stavech hazet vhodnou vyjimku (IllegalArgumentException...), asserce by mely "dozajistovat" ze uvnitr tvych kusu kodu je vsechno OK.
Ja uz leta asserci nenapsal, vsechny kontoroly pouzivaji jine vyjimky. Ale protoze neni uplne pekne mit vsude if ... throw, neni od veci misto toho pouzit nejakou knihovnu, ktera dela to same v citelnejsi podobe (assertThatNotNull(variable, "comment"), assertNotEmpty(list, SpecializedExceptionClass)....), cimz ziskas pekny zapis i jistotu, ze na produkci i pri testovani je vse stejne.