Exception Handling

Derleme zaman hatasında dolayı yaptığımız exception handlingleri anlıyorum ama runtime exceptionları anlamadım. Yani gerçekten kullanmaya ihtiyaç duymuyorum. Zaten bir mantık hatası olsa bunu önceden tespit edemem ki program çalıştığında bir hata oluşursa hatayı bulurum ve düzeltirim mantık hatası olan yere bir RunTime Exception Handling kodu yazmamızın anlamı ne?
Ve duyduğuma göre insanlar projelerinde exception sınıfları oluşturup kullanıyorlarmış. Bir exception sınıfı oluşturup kullanmaya neden ihtiyaç duyarım?

Hata yakalama, mantık hatalarını engellemek için kullanılmıyor. Kullandığınız bir kütüphane karşılaştığı sorunları size hata yükselterek iletmeyi tercih edebilir. Mesela diskten bir dosya okumak istiyorsunuz ancak buna engel olabilecek durumlar var. Sizin bunların hepsini kendi kodunuzda kontrol etmeniz hem zor hem de konu hakkında belli seviyede bilginizin olmasını gerektiriyor. Onun yerine dosyayı okuyan fonksiyon bu kontrolleri yapıp gerekirse hata yükseltebilir.

Hataları iletmenin tek yolu exception’lar değil, hata olup olmadığını belirten verinin fonksiyonun dönüş değerine dahil edildiği diller de var. Bunu Java’da da yapmanızın önünde bir engel yok.

3 Beğeni

dosya işlemlerinde hata yakalama fonksiyonlarını kullanmadan dosya oluşturamazsınız diye biliyorum.


     File file = new File("/storage/emulated/0/yazbel.txt");#dosya yolunu değiştirmeniz gerek
      try{
        file.createNewFile();
        System.out.println("Dosya oluşturuldu"); 
      }
      catch(IOException e){
        System.out.print("Dosya oluşturulamadı");
      }

try catch bloklarını cıkarıp deneyin bi isterseniz

Diskten dosya okunamaması kodda bir eksiklik yoksa eğer sistemle ilgili bir hata değil mi? Yani ben kendi sistemimde denesem de bir şey bulamayacağım bu kodu yazmamın anlamı ne olacak? Çevrimiçi kullanım için hazırlanmış projelerde hatayı yazılımcıya istemci üzerinden gönderilmesi gibi durumlarda kullanılması mantıklı olabilir ama onun dışında exceptionlara veya söylediğiniz exceptionla aynı işlevi gören diğer yola neden ihtiyacım olsun ki?

Baştada belirttiğim gibi IOExceptionları biliyorum zaten sağolun yine de

Olusan bu hataya “exception” diyoruz (diyebiliyoruz) zaten. Bulup duzeltmenin yolu da catch blogu.

Structured exception handling’in guzelligi hatayi yakalayan/duzelten kodu hatanin olustugu yere veya hemen ustune yazmak zorunda olmamamiz. Her seviye olusabilen hatalarin bir kismini yakalayip gerisini yukari seviyeye birakabiliyor. Soyle:

Bunu guzelce yapabilmek icin dilde monad destegi (haskell’in do notation’i, veya en azindan guzel bir Either monad’i ve metodlari) ve/veya pattern matching gerekiyor.

Mevcut Exception siniflari isini gormuyorsa. Mesela yazdigimiz bir aplikasyonda gereken konfigurasyon degerlerinden biri yoksa ConfigurationValueNotFoundException firlatiliyor. Standart ne kullanabilirim diye baktim, fakat bir sey bulamadim.

O zaman soru exception’larla ilgili degil, hata duzeltmeyle ilgili. Hata duzeltmeye neden ihtiyac oldugunu konusuyoruz; exception’lar bunun bir yontemi.

Hatanin yazilimciya istemci uzerinden gonderilmesi icin projenin cevrimici kullanim icin hazirlanmis olmasina gerek yok. Herhangi bir katmanlama yapildigi noktada her katman bir digerinin sunucusu veya istemcisi oluyor; burada onemli olan yazilimin cevrimici olup olmamasi degil, katmanlardan olusup olusmamasi (veya basit veya karmasik bir yapiya sahip olmasi.)

2 Beğeni