> a throw részben ugyanazt csinálja, mint egy goto. Sőt, rosszabb, mert nem lehet tudni, hogy hova ugrik
Dehogynem lehet tudni. Az igaz, hogy az exception "ugrása" nem 1:1 kapcsolat, több helyen lehet kezelni (vagy éppen szándékosan nem kezelni), inkább előny a gyakorlatban, mint hátrány.
Ad absurdum ha nagyon nem megy az előre gondolkodás, Ctrl-click (vagy hasonló, attól függ mit használsz) az exceptionre, és már ott is a lista, mi történhet. Még csak fejben sem kell tartani! \o/
> Amúgy is, mi dönti el, hogy valami exception-e, vagy sem?
> A fordító pedig lehetőség szerint figyelmeztessen arra, ha valami potenciális hiba nincs lekezelve.
Az exception pont arra jó, hogy a "kivételes" (exception, you see?) le legyenek kezelve. A fordító nem tud minden létező programot szemantikailag elemezni, ott még nem tart a technológia, hogy a fejlesztő szándékát kitalálja. Nem lehet compile-time warningot adni olyan nem várt dolgokra, hogy el fog fogyni a RAM futtatáskor, vagy nem lesz hálózat, vagy 503-at ad a webservice, vagy nullát ír be a user egy osztás inputjába, vagy február 29-et állítunk be nem szökőévben, stb.
Amúgy te ebben a szoftverfejlesztés dologban mennyire vagy járatos? :)