ugrás a tartalomhoz

Why Exceptions Suck

Hidvégi Gábor · 2015. Feb. 24. (K), 21.53
A kivételkezelés problémái
 
1

Ennyi sületlenséget...pont

blacksonic · 2015. Feb. 28. (Szo), 12.33
Ennyi sületlenséget...pont hogy átlátható lesz tőle...csak ott foglalkozol kivételkezeléssel azon a szinten ahol ez releváns. A performancia része meg...ha kevésszer van hiba és nem Control Flowra használod semmit nem fog számítani h lassúbb.
Nem mond semmi normális alternatívát (a visszatérési értékekre ő is azt mondja h nem egy jó út), nekem ez így csak még egy megkeseredett siránkozás.
2

I think return-codes are

Hidvégi Gábor · 2015. Feb. 28. (Szo), 20.18
I think return-codes are better than structured exception handling. It's much harder to use a return code badly.
Mi egy asszociatív tömböt adunk vissza a hibakóddal és a hibaüzenettel, siker esetén ezek null értéket kapnak, és van benne egy 'eredmeny' mező.
3

És ez miben jobb, mint egy

BlaZe · 2015. Feb. 28. (Szo), 20.29
És ez miben jobb, mint egy hibakód, vagy egy exception? A sebesség értelemszerűen nem volt erős szempont :) Viszont legalább simán lehet ignorálni az ellenőrzést és büntetlenül le lehet nyelni a hibákat, ráadásul még lehet is mindenhol null-checkeket csinálni, ami kb antipattern.
4

Szubjektív

Hidvégi Gábor · 2015. Feb. 28. (Szo), 20.40
A sebesség szerintem sem annyira fontos szempont. Én úgy szoktam meg, hogy a hibaellenőrzés rögtön a függvényhívás után van. Pontosan ugyanúgy lehet ignorálni, mint egy kivételt.

Persze az sem rossz, hogy van egy try cache blokkod, és csak a végén nézed meg a kivétel típusát, és annak megfelelően kezeled.
5

Én úgy szoktam meg, hogy a

BlaZe · 2015. Feb. 28. (Szo), 22.10
Én úgy szoktam meg, hogy a hibaellenőrzés rögtön a függvényhívás után van.
Ezt nem offenzívaként írom, de hibát nem szokásból és szokásokkal ellenőrzünk, hanem ésszerűen, általában mindig máshogy (és máshol), a hiba típusától függően. Az esetek nagy részében a hibát nem ott kell lekezelni ahol történik, hanem egy magasabb absztrakciós szinten. Erre nyújt megoldást az exception. Visszatérési érték ellenőrizgetéssel ez egy kínszenvedés.

Pontosan ugyanúgy lehet ignorálni, mint egy kivételt.
insert();
error();
insert();
commit();
Eléggé más az eredmény, ha az error() hibakódot ad vissza, vagy ha exceptiont dob. Előbbi esetében szépen dolgozik tovább a program, jó eséllyel hibás állapotba viszi az adatbázist is, és akár jó nagy bajt okoz mire észreveszed. Exception esetén skippeli a második insertet és commitot, közvetlenül a hibakezelésig visszaugrik a stacken (ahol jó eséllyel többek között egy rollback fog történni).

Persze az sem rossz, hogy van egy try cache blokkod, és csak a végén nézed meg a kivétel típusát, és annak megfelelően kezeled.
Itt nem értem mire gondolsz. Catch blokkokat tudsz exception típusokra írni.