A throw és a catch-nak mi az értelme?
Hogy kezelsz le egy kivételt, ha nem try-catch használatával? Mondjuk meg akarsz nyitni egy fájlt, de a fájl nem létezik, vagy írnál a lemezre, de nincs írási jogod, vagy foglalnál le memóriát, de elfogyott... ezt hogy kezeled le catch nélkül?
A throw pedig akkor használatos, ha te szeretnéd jelezni egy kivételes esemény bekövetkeztét, vagy ha egy kapott kivételt szeretnél tovább dobni.
Szerintem nincs rá általános szabály, hogy mikor dobsz tovább egy kivételt, mikor kezeled le helyben, stb. Nyilván függ az adott szoftver méretétől, a hibaforrások számától, stb.
A hibakezelést szépíti meg és választja szét az üzleti logikától.
Hibakódokat visszaadogatni nagyon régóta nem divat.
Hogy mi értelme?? :D
A eset: Nem használod és a program hiba esetén összeomlik, leáll futás közben. Nem hangzik jól.
B eset: Használod, hiba keletkezik akkor azt elkapod és kezeled a megfelelő módon. Ilyenkor a program nem omlik össze, nem áll le. Ez jobban hangzik.
Persze nem kell az egész "kódot" try-cathbe rakni, csak a kritikus részeket, ahol lehet hiba. Bár ebből lehet pár :D (gondolj bele egy adatbázis kapcsolatba, ahol magával a kapcsolattal úgy gondolod, nincs soha probléma, de egyszer megváltozik az adatbázis elérhetősége, kapcsolata stb. Ha ez nincs kezelve, a program induláskor lehall. Máskülönben kiírja, hogy gebasz van a db-vel.)
Try catch használható ha számítasz hogy egy operáció nem biztos, hogy sikeres lesz.
Ha nem kapod el az errort akkor le fog állni a programod.
Throw lényege az hogy te jelezd az hogy valami sikertelen volt és nem tudsz eredményt visszaadni.
Alapvetően a hibakezelés koncepcióját kellene megértened.
A try..catch..throw, tehát az exception-alapú hibakezelés, ez egy koncepció arra, hogy hogyan kezeld a hibákat.
De nem ez az egyetlen koncepció, régies, C-stílusban pl. a win32api, a hibakezelés úgy nézett ki, hogy meghívtál egy függvényt, és akkor az visszadott 0-t, ha sikeresen lefutott, egyébként meg valami hibakódot, de a program ugyanúgy futott tovább.
Na most mondjuk ebben az utóbbi koncepcióban mondjuk így néz ki a hibakezelés:
if (!valami_function()) {
// hibaüzenet a usernek
}
if (!valami_masik_function()) {
// valami másik hibaüzenet a usernek
}
stbstb.
Tehát ha egy függvényben volt 10 függvényhívásod, mindegyiket egyenként le kellett vizsgálgatni, ami elég hülyén néz ki.
Ehhez képest az exception alapú hibakezelés lényege az, hogy egy kód nem tud valami miatt lefutni, akkor az dob egy kivételt, ott meg is szakad a futás, a vezérlés pedig átadódik a kivételkezelő programrészre, így sokkal átláthatóbb és kényelmesebb az egész.
Tehát a fenti példára:
try {
valami_function();
valami_masik_function();
}
catch (Exception ex)
{
// hibaüzenet a user-nek
}
Látható már ennyiből is, hogy sokkal átláthatóbb és egyszerűbb a hibakezelés, ráadásul ugye az exception már általában tartalmaz egy human readable hibaüzenetet is, tehát nem kell még pluszba egy integer hibakódra is if-elgetni, hogy valami értelmes dolgot ki tudjál írni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!