throw'u D'nin kütüphanesine bakarken görmüştüm. Anladığım kadarıyla C++'da da çok kullanılıyor.
Nerede kullanılır nasıl kullanılır gibi bilgiler edinebilir miyim ?
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
September 09, 2009 throw ne işe yarar nasıl kullanılır ? | ||||
---|---|---|---|---|
| ||||
throw'u D'nin kütüphanesine bakarken görmüştüm. Anladığım kadarıyla C++'da da çok kullanılıyor. -- |
September 10, 2009 throw ne işe yarar nasıl kullanılır ? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Can Alpay Çiftçi (canalpay) | throw; "at, fırlat" anlamındadır ve bir fonksiyonun "benim bu işi yapmam olanaksız" diyerek havlu atmasıdır. ;) Hata atma [exception] kavramının değerini görmek için öncelikle bu olanağın olmadığı dillerde nasıl yapıldığına bakmak gerek. Bir C programı:
Her çağrının mutlaka hata kodunu denetlemesi gerektiğini görüyor musun? Her fonksiyon çağrısının iki işi var: 1) fonksiyonu çağır, 2) hatayı denetle... ve hatayı elden ele üst katmanlara aktar. Yukarıdaki örnekte hata kodu şu sıra ile elden ele geçiriliyor: 'yumurta_kir() -> yemek_pisir() -> main()' Tabii aynı durum tezgahi_bosalt() ve malzemeleri_topla() fonksiyonlarında da oluşur, ve aslında uygulamada elden ele geçire fonksiyonların sayısı üç değil, çok daha fazla olur. Burada dikkat edilmesi gereken şu: Hata, yalnızca onu bildiren ve onu bilmek isteyen fonksiyonu ilgilendirir. İşte hata atma düzeneği bunu gerçekleştirir. 'throw' ile atılan hata, ara katmanların işlerini otomatik olarak yarım bıraktırır; ve hata ile ilgilenen fonksiyona otomatik olarak ulaşır. İşte aynı programın hata atan D eşdeğeri:
Şimdi hatayı farkeden fonksiyon ("throw eden") ile hatayla ilgilenen fonksiyon ("catch eden") arasında aracı olmadığı için kod son derece temiz. Herkes, işini yapmaya çalışıyor... Not: Aslında Hata sınıfı daha akıllı olabilir ve hatanın kendisiyle ilgili bilgi de taşır. Örneğin türü bile 'KabuksuzYumurtaHatası' olabilir... Ali -- |