Vighairi dhidi ya Hitilafu
Tabia isiyotarajiwa itatokea wakati programu inaendeshwa. Hii inaweza kuwa kutokana na vighairi au hitilafu. Vighairi ni matukio, ambayo yanaweza kutatiza mtiririko wa kawaida wa programu. Makosa ni hali ambazo zinaweza kuchukuliwa kuwa haziwezi kurejeshwa. Vighairi vinahusiana zaidi na programu yenyewe, ilhali hitilafu zinahusiana na mfumo ambao programu inaendesha.
Vighairi ni nini?
Vighairi ni tukio, ambalo linaweza kutatiza mtiririko wa kawaida wa programu. Isipokuwa jina linatokana na "tukio la kipekee". Kutupa ubaguzi ni mchakato wa kuunda kitu cha kipekee na kukabidhi kwa mfumo wa wakati wa kutekeleza. Kitu cha ubaguzi huundwa na njia ambayo ubaguzi ulifanyika. Kitu cha ubaguzi kina habari muhimu kama vile aina na maelezo ya ubaguzi. Wakati mfumo wa kukimbia unapopokea kitu cha ubaguzi, utajaribu kutafuta mtu wa kuishughulikia ndani ya rundo la simu kwa kuipitia kwa mpangilio wa nyuma (ambapo njia ziliitwa). Wito Stack ni orodha iliyoagizwa ya mbinu, ambazo ziliitwa kabla ya mbinu ambayo ubaguzi ulifanyika. Mfumo wa kukimbia unafanikiwa ikiwa utapata njia na kidhibiti cha kipekee. Kidhibiti cha ubaguzi ni kizuizi cha msimbo ambacho kinaweza kushughulikia rasmi ubaguzi huo. Ikiwa mfumo wa wakati wa kutekelezwa utapata kidhibiti kinachofaa (yaani, aina ya ubaguzi inalingana na aina inayoweza kushughulikiwa), itapitisha kitu cha ubaguzi kwa kidhibiti. Hii inaitwa kukamata ubaguzi. Walakini, ikiwa ubaguzi hauwezi kushughulikiwa, programu itasitishwa. Katika Java, vighairi vinarithi kutoka kwa ‘Throwable class.’ NullPointerException na ArrayIndexOutOfBoundsException ni vighairi viwili vya kawaida katika Java.
Kosa ni nini?
Hitilafu ni hali inayoweza kuchukuliwa kuwa haiwezi kurekebishwa kama vile programu inayohitaji kiasi cha kumbukumbu kubwa kuliko kinachopatikana. Hitilafu hizi haziwezi kushughulikiwa wakati wa utekelezaji. Ikiwa kosa litatokea, programu itasitishwa. Katika Java, makosa hurithi kutoka kwa darasa linaloweza kutupwa. Hitilafu kawaida huwakilisha matatizo makubwa ambayo programu (au programu) haipaswi kujaribu kupata. Makosa ni hali isiyo ya kawaida tu, ambayo haitarajiwi kutokea katika hali ya kawaida, na kwa hivyo haitabiriki kamwe. Kwa mfano, OutOfMemoryError, StackOverflowError na ThreadDead ni makosa kama hayo. Mbinu hazipaswi kamwe kuwa na vidhibiti kwa makosa.
Kuna tofauti gani kati ya Vighairi na Hitilafu?
Hitilafu na vighairi vyote viwili ni tukio lisilotakikana wakati wa utekelezaji wa programu. Walakini, wana tofauti kuu. Vighairi vinaweza kuonwa na mtayarishaji programu, ilhali hitilafu ni vigumu kuiona. Vighairi vinaweza kuangaliwa au kubatilishwa. Lakini makosa daima hayajadhibitiwa. Vighairi kwa kawaida huonyesha hitilafu iliyosababishwa na mtayarishaji programu. Hata hivyo, hitilafu hutokea kwa sababu ya hitilafu ya mfumo au matumizi yasiyofaa ya rasilimali. Kwa hiyo, tofauti zinapaswa kushughulikiwa katika ngazi ya maombi, wakati makosa yanapaswa kuchukuliwa huduma katika ngazi ya mfumo (ikiwa inawezekana tu). Baada ya kushughulikia ubaguzi, umehakikishiwa kurudi kwenye mtiririko wa kawaida wa programu. Lakini hata ikiwa kosa litakamatwa, mpangaji programu anaweza asijue jinsi ya kulishughulikia hapo kwanza. Tofauti na kushughulikia makosa ya kitamaduni, vighairi huruhusu kutenganisha msimbo wa kushughulikia makosa kutoka kwa msimbo wa kawaida.