Exception handling üzerine temel seviyede bir sunu.
İçerisinde exception handling ile ilgili açıkladığım her ifadeyi php, javascript, x++ gibi dillerde nasıl kullanılacağını gösteren örnek kodlarda ekledim.
Örnek kodlar: http://benzersanatci.com/phpax/ExceptionHandling_201305.zip
2. Exception Nedir ?
• Bir programın derleme(compile-time) veya
çalışma zamanında(run-time) ortaya çıkan
istisnalara, beklenmedik durumlara verilen
isimdir.
3. Exception
Exception’lar pek çok değişik sebepten dolayı
üretilebilirler. Bunlar:
• Kullanıcı kaynaklı
• Mantıksal
• Sistemsel
...olabilirler.
4. Örnek Exception’lar
• Kullanıcı geçerli olmayan bir veri girebilir.
• Açılmak istenen veya sayfaya dahil edilmek
istenen dosya bulunmayabilir.
• İşlemin ortasında internet bağlantısı
sonlanabilir.
• Veritabanı işlemi sırasında veritabanına
ulaşılamayabilinir vb.
5. Exception Handling Nedir ?
• Çalışma zamanında ortaya çıkan istisnai ve
beklenmedik durumların programlama dilinde
algılanması,
• Duruma göre programın akışının buna göre
düzenlenmesine,
• Hataların kotarılmasına exception handling
denir.
6.
7. Hata yakalama mekanizması
• İleri seviye programlama dillerinde try, catch
vb. istisna(exception) yakalama ifadeleri
geliştirilmiştir.
• Bu ifadelere sırasıyla değinelim:
8. Try
• Try bloğu içerisinde kaynak kodlarımız yer alır.
Bu blok içerisinde olası bir exception, catch
bloğuna yönlendirilir.
9. Catch
• Catch bloğu, istisnai
durumun yakalandığı
ve bunun sonucunda
ne yapılacağını
belirttiğimiz kısımdır.
10. Catch
• Catch bloğu birden fazla kullanılabilir. Farklı
Exception’larda programın akışını farklı düzenlemek
isteyebiliriz. Örnek c# kodu:
13. • Karşılaştığımız belli durumlar, her
programlama dilinde aynı tepkiyi vermez.
• Örneğin sıfıra bölünme hatası(10 / 0)
javascript ve php’de kod akışını durdurmazken
c#’da DivisionByZero exception’ının
tetiklenmesine sebebiyet veriyor.
Farklı diller farklı exception’lar...
14. Farklı diller farklı exception’lar...
• Örneğin tanımlı olmayan bir fonksiyonu çağırmak
javascript’te bir exception’a sebep olurken php de
bir fatal error’a sebebiyet veriyor ve bütün kod
akışı duruyor.
15. Throw
• Throw, fırlatmak demektir. Bir istisnayı manuel
olarak göndermek istediğimizde kullanırız.
• Gönderilen istisna yine Catch bloğu tarafından
yakalanır.
• C tabanlı dillerde sintaksı genel olarak şuna
benzemektedir:
• throw new Exception(‘Örnek Mesaj’);
17. Finally
• Try ve Catch blokları çalıştıktan sonra her
şekilde ne olursa olsun çalışacak kodlarımız
buraya yazılır.
• Finally bloğu genellikle bazı kaynakları serbest
bırakmak için kullanılır.
18. Retry
• Finally gibi bu ifade de her programlama
dilinde bulunmayabilir. Sadece Catch bloğuna
yazılır.
• Görevi ise Try içindeki kodu tekrardan
çalıştırmaktır. Genellikle veritabanı
işlemlerinde transaction’ı tekrardan
tetiklemek içindir.
• X++ içinde max 5 defa kullanılabilir.
20. Örnek Exception Class’ı
• Kendi exception class’ımızı türettiğimiz ve
birden fazla catch bloğu eklediğimiz php
örneğimizi inceleyelim.
21. Hata Yönetimi
• Veritabanı, dosya okuma-yazma gibi istisnaya,
hataya yatkın yerlerde try/catch bloklarımızı
yerleştirip hataları yönetmeliyiz.
• Aynı zamanda uygulamada alınan
exception’ları loglamak iyi bir alışkanlıktır.
22. Hata Yönetimi - Log
• Uygulamanın çalıştırılma ortamı(server vb)
değiştiğinde,
• Veya uygulamayı bir ekiple birlikte
geliştiriyorsanız ve devamlı diğer
fonksiyonaliteleri etkileyebilecek değişiklikler
yapılıyorsa,
• Bunlara benzer durumlarda loglarınıza bakarak
exception’ın kaynağını bulabilirsiniz.
Dynamics AX’da bu blok bulunmamaktadır.Örneğin try bloğunda bir dosya açtınız, eğer bir hata oluşursa try bloğu içinde dosyayı kapatma kodu çalışmadan catche atlar ve sonuçta dosyanız kapanmaz. Bu durumda siz dosya kapatma işlemini finally bloğunda yapacak olursanız her halükarda dosyanızın kapanmasını garanti altına almış olursunuz.
Retry 5 kaynağı inside dynamics ax 2009 sayfa 518.....an UpdateConfl ictNotRecovered exception. In Dynamics AX, the maximum number of retries, which is set in the OCCRetryCount macro element in the AOT, is 5.
Görüleceği üzere extend ettiğimiz Exception class’ının methodları olan getLine(),getFile(),getMessage() vb. Lerini kullanabiliyoruz.