Benim görüşüme göre, istisnalar çalışma zamanında kod hatalarını tespit etmek için önemli bir araçtır. Hem testlerde hem de üretimde. Mesajlarını yeterince ayrıntılı hale getirin, böylece bir yığın iziyle birlikte bir günlükten ne olduğunu anlayabilirsiniz.
İstisnalar çoğunlukla bir geliştirme aracı ve beklenmeyen durumlarda üretimden makul hata raporları almanın bir yoludur.
Kaygıların ayrılmasının (sadece beklenen hataların olduğu mutlu bir yolun yanı sıra, beklenmeyen hatalar için genel bir işleyiciye ulaşıncaya kadar düşmenin dışında) iyi bir şey olması, kodunuzu daha okunaklı ve sürdürülebilir hale getirmek, aslında kodunuzu mümkün olan her şeye hazırlamak imkansızdır. Beklenmeyen durumlar, okunamazlığı tamamlamak için hata işleme kodu ile şişirerek bile.
Bu aslında "beklenmedik" nin anlamı.
Btw., Ne bekleniyor ve ne değil sadece çağrı sitesinde verilebilecek bir karar değil. Bu yüzden Java’daki kontrol edilen istisnalar işe yaramadı - bir API geliştirilirken, ne beklendiği ya da beklenmeyen bir şey olmadığı açıkça belirlendi.
Basit örnek: bir karma haritanın API'sinin iki yöntemi olabilir:
Value get(Key)
ve
Option<Value> getOption(key)
ilk bulunmazsa bir istisna atmak, ikincisi size isteğe bağlı bir değer verir. Bazı durumlarda, ikincisi daha anlamlı olur, ancak diğerlerinde, kodunuzun sinmply, verilen bir anahtar için bir değer olmasını beklemelidir, eğer bir tane yoksa, bu kodun düzeltemeyeceği bir hatadır çünkü varsayım başarısız oldu. Bu durumda, çağrının başarısız olması durumunda kod yolundan çıkıp bazı genel işleyicilere düşmek istenen davranış aslında.
Kod asla başarısız temel varsayımlarla başa çıkmaya çalışmamalıdır.
Elbette onları kontrol edip iyi okunabilir istisnalar atmak dışında.
İstisnaları atmak kötü değildir, ama onları yakalamak olabilir. Beklenmeyen hataları düzeltmeye çalışmayın. Bazı döngüler veya işlemlere devam etmek istediğiniz birkaç yerde istisnalar yakalayın, bunları günlüğe kaydedin, belki bilinmeyen bir hata bildirin ve hepsi bu kadar.
Her yerde blokları yakalamak çok kötü bir fikir.
API'lerinizi, niyetinizi ifade etmeyi kolaylaştıracak şekilde tasarlayın, örneğin, bulunmayan bir anahtar gibi, belirli bir durum bekleyip beklemeyeceğinizi beyan edin. API'nizin kullanıcıları yalnızca beklenmedik durumlar için arama çağrısını seçebilir.
İnsanların istisnaları reddetmesinin ve hata yönetimi otomasyonu ve kaygıların yeni dillerden daha iyi ayrılması için bu önemli aracı göz ardı ederek çok ileri gitmelerinin sebebinin kötü deneyimler olduğunu tahmin ediyorum.
Bu ve bazıları için neyin iyi olduğu konusunda yanlış anlaşılma.
Monadic ciltleme yoluyla HER ŞEY yaparak bunları simüle etmek, kodunuzu daha az okunabilir ve sürdürülebilir hale getirir ve bir yığın iz bırakmadan bitirdiniz, bu da bu yaklaşımı WAY'i daha da kötüleştirir.
İşlevsel stil hata yönetimi, beklenen hata durumları için mükemmeldir.
İstisna işlemenin otomatik olarak geri kalanı halletmesine izin verin, bunun için :)
panic
hangisi aynı değildir. Buna ek olarak, orada söyleneni, bir istisna,GOTO
kimse bunu böyle söylemese de, bariz nedenlerden ötürü, sofistike (ama rahat) bir yöntemden daha fazlası değildir .