İstisna
- İngilizcesi
- Exception
- Türkçe karşılığı
- özel durum
- Okunuşu
- iksepşın
Günlük kullanımda iki ad da yaygın.
Kısaca
İstisna, bir hata oluştuğunda programın normal akışını kesen bir olaydır; kod bunu programı çökertmek yerine yakalayıp ele alabilir.
Programlamada istisna (exception) nedir?
İstisna, eksik bir dosya, başarısız bir ağ isteği ya da geçersiz girdi gibi program çalışırken bir şeylerin ters gittiğini bildirir. Kod bir istisna fırlattığında (throw veya raise), normal yürütme o noktada durur. Program daha sonra sorunu ele alabileceğini bildirmiş bir kod arar.
İstisnalar çağrı yığınında yukarı doğru ilerler. İstisnayı fırlatan fonksiyon onu yakalamazsa, onu çağıran fonksiyona, sonra da onun çağırıcısına ve böyle devam ederek yakalama fırsatı verilir. İstisnaları, riskli kodu bir try bloğuna alıp bir hata oluşursa çalışan bir catch bloğu (Python'da except adını alır) ve isteğe bağlı olarak dosyaları kapatmak gibi temizlik işleri için yararlı, her durumda çalışan bir finally bloğu ekleyerek yönetirsiniz. Hiçbir şey istisnayı yakalamazsa program ya da istek genellikle bir hata mesajı ve bir yığın izi (stack trace) ile başarısız olur.
Yangın alarmı istisna için iyi bir benzetmedir. Çaldığında herkes yaptığı işi bırakır ve yangınla başa çıkmak üzere eğitilmiş kişiler devralır; kimse yanıt vermezse tüm bina tahliye edilir. İstisnalar, programların ana 'mutlu yol' mantığını sorunlarla ilgilenen koddan ayrı tutmasını sağlar.
İstisnalar sıklıkla genel olarak hatalarla karıştırılır. Sözdizimi hataları kodun hiç çalışmasını engeller; istisnalar ise çalışma zamanında olur ve yönetilebilir. Go ve Rust gibi bazı diller, istisna fırlatmak yerine hataları sıradan değerler olarak döndürmeyi tercih eder; bu, olası her başarısızlığı kodda görünür kılar. Bir istisnayı yakalayıp sessizce yok saymak, hataları gizlediği için yaygın bir anti-desendir.
Önemli noktalar
- İstisna, çalışma zamanında bir hata oluştuğunda normal yürütmeyi keser.
- Kod bir istisna fırlatır ve bir
try/catchbloğu onu yakalayıp ele alabilir. - Yakalanmayan istisnalar çağrı yığınında yukarı ilerler ve programı çökertebilir.
finallybloğu, istisna olsun olmasın çalışır; bu da temizlik işlerine uygundur.- Yalnızca anlamlı biçimde ele alabileceğiniz istisnaları yakalayın; sessizce yutmak hataları gizler.
Örnek
function parseAge(input) {
const age = Number(input);
if (Number.isNaN(age)) {
throw new Error(`"${input}" is not a number`); // stop and signal a problem
}
return age;
}
try {
parseAge("abc");
} catch (error) {
console.error("Invalid input:", error.message); // handle the problem
} finally {
console.log("Validation finished"); // always runs
}Sık sorulan sorular
Hata (error) ile istisna (exception) arasındaki fark nedir?
Terimler çoğu zaman birbirinin yerine kullanılır ve birçok dilde istisna, bir çalışma zamanı hatasını bildirmek için kullanılan nesnedir. Java ise bellek tükenmesi gibi bir uygulamanın ele almaya çalışmaması gereken ciddi sorunlar için Error ile kodun yakalaması beklenen Exception arasında ayrım yapar.
Yığın izi (stack trace) nedir?
Yığın izi, bir istisna fırlatıldığı anda etkin olan fonksiyon çağrılarının dosya adları ve satır numaralarıyla yazdırılan listesidir. Yukarıdan okunduğunda sorunun nerede oluştuğunu ve programın oraya nasıl geldiğini gösterir.
async/await ile hataları nasıl yönetirim?
await çağrılarını bir try/catch bloğuna alın. Bir async fonksiyonun içinde reddedilen bir promise fırlatılmış bir istisna gibi davranır, dolayısıyla catch bloğu hatayı alır.
İlgili sayfalar
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- Async/AwaitProgramlamanın Temelleri, s. 2Async/await, asenkron kodu sıradan adım adım kod gibi okunur biçimde yazmayı sağlayan, her await'te bir promise ya da görev bitene dek duran sözdizimidir.
- PromiseProgramlamanın Temelleri, s. 46Promise, asenkron bir işlemin nihai sonucunu temsil eden bir nesnedir; iş bittiğinde kodun başarıya ya da hataya tepki vermesini sağlar.
- CallbackProgramlamanın Temelleri, s. 5Callback, başka bir fonksiyona argüman olarak verilen ve o fonksiyonun bir iş bittiğinde ya da bir olay gerçekleştiğinde sonradan çağırdığı fonksiyondur.
- SınıfProgramlamanın Temelleri, s. 49Sınıf, nesne yönelimli programlamada bir grup nesnenin paylaştığı veri ve davranışı tanımlayan, nesnelerin örnek olarak ondan oluşturulduğu bir plandır.
- Stack traceProgramlamanın Temelleri, s. 51Stack trace, bir hata oluştuğu anda devam eden fonksiyon çağrılarının listesidir; hatanın çıktığı satırdan programın başladığı yere kadar uzanır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin