Gelen bu daha yeni soruya ben istisnalar hiç bir ileti içermemeli noktası yaptı. Kanımca, yaptıkları gerçeği çok büyük bir yanılgıdır. Teklif ettiğim şey bu
İstisnanın "mesajı", istisnanın (tam nitelikli) sınıf adıdır .
Bir istisna, tam olarak ne olduğu hakkında kendi üye değişkenlerinde mümkün olduğunca fazla ayrıntı içermelidir; örneğin, IndexOutOfRangeException
geçersiz olduğu tespit edilen endeks değerini ve istisnanın atıldığı anda geçerli olan üst ve alt değerleri içermesi gerekir. Bu şekilde, yansıma kullanarak otomatik olarak şöyle bir mesaj yazabilirsiniz: IndexOutOfRangeException: index = -1; min=0; max=5
ve bu, yığın izi ile birlikte, sorunu gidermek için ihtiyaç duyduğunuz tüm objektif bilgiler olmalıdır. "İndex -1, 0 ile 5 arasında değildi" gibi güzel bir mesaja biçimlendirmek, herhangi bir değer katmaz.
Özel örneğinizde, NodePropertyNotFoundException
sınıf bulunamayan özelliğin adını ve özelliği içermeyen düğüme bir başvuru içerir. Bu önemlidir: bu olmalı değil düğümün adını içermelidir; gerçek düğüme bir referans içermelidir. Özel durumunuzda bu gerekli olmayabilir, ancak bu bir prensip meselesi ve tercih edilen bir düşünce şeklidir: Bir istisna oluştururken öncelikli endişe, onu yakalayabilecek kodla kullanılabilir olması gerektiğidir. İnsanlar tarafından kullanılabilirlik önemli, ancak yalnızca ikincil bir sorundur.
Bu, kariyerinizde belirli bir noktada tanık olabileceğiniz çok sinir bozucu durumla ilgilenir, burada mesaj metninde neler olduğu hakkında hayati bilgiler içeren bir istisna yakalamış olabilirsiniz, ancak üye değişkenlerinde değil mesaj metninin altta yatan katmanın gelecekteki sürümlerinde aynı kalacağını ümit ederek, metnin dizgeyi ayrıştırması ve programın, diğer ülkelerde koşmak.
Tabii ki, istisnanın sınıf adı istisnanın mesajı olduğundan, (ve istisnanın üye değişkenleri de özel detaylardır), bu, tüm farklı mesajları iletmek için çok sayıda ve çok sayıda istisnaya ihtiyacınız olduğu anlamına gelir ve bu iyi.
Şimdi, bazen kod throw
yazarken, bir ifadeyi hızlı bir şekilde kodlamak ve yeni bir istisna sınıfı oluşturmak için yaptığımız işi kesmek yerine kodumuzu yazmaya devam etmek istediğimiz hatalı bir durumla karşı karşıya kalıyoruz. oraya at. Bu gibi durumlarda, GenericException
bir dize mesajını bir inşaat zamanı parametresi olarak kabul eden bir sınıfa sahibim , ancak bu istisna sınıfının kurucusu, bu sınıfın FIXME XXX TODO
her bir örneğinin olması gerektiğini belirten büyük, büyük, parlak, parlak bir yorumla süslenmiştir . yazılım sistemi piyasaya sürülmeden önce, tercihen kodun işlenmesinden önce, bazı daha özel istisna sınıflarının bir örneği ile değiştirildi.