Hata Yönetimi (Error Handling)
Exceptions
Dart dilinde, kodunuz istisnaları (exceptions) fırlatabilir ve bunları yakalayabilir. İstisnalar, beklenmeyen bir durumu belirten hatalardır. Eğer istisna yakalanmazsa, istisnayı atan izolat (isolate) askıya alınır ve genellikle izolat ve program sonlandırılır.
Java'nın aksine, Dart'ta tüm istisnalar kontrolsüz istisnalar (unchecked exceptions) olarak kabul edilir. Yani metodlar hangi istisnaları fırlatabileceğini belirtmez ve herhangi bir istisna yakalamak zorunlu değildir.
Dart, Exception ve Error tiplerini sağlar, ayrıca birçok önceden tanımlanmış alt tipler bulunmaktadır. Elbette kendi istisna tiplerinizi de tanımlayabilirsiniz. Ancak, Dart programları Exception ve Error objeleri olmak zorunda olmayan herhangi bir non-null objeyi istisna olarak fırlatabilir.
Throw (Fırlatma)
İstisna fırlatmanın bir örneği aşağıda verilmiştir:
Ayrıca, isteğe bağlı olarak herhangi bir objeyi de fırlatabilirsiniz:
Not
Üretim kalitesindeki kod genellikle Error veya Exception'ı uygulayan tipleri fırlatır.
Çünkü istisna fırlatmak bir ifade olduğundan dolayı, => ifadelerinde ve ifadeye izin veren diğer yerlerde istisna fırlatabilirsiniz:
Catch (Yakalamak)
İstisnayı yakalamak, istisnanın yayılmasını durdurur (eğer istisnayı tekrar fırlatmazsanız). İstisnayı yakalamak, onunla ilgilenme şansı verir:
Birden fazla türde istisna fırlatabilecek kodu ele almak için birden çok catch bloğu belirtebilirsiniz. Atılan objenin türüne eşleşen ilk catch bloğu istisnayı ele alır. Eğer catch bloğu bir tür belirtmezse, bu blok herhangi bir türde fırlatılan objeyi ele alabilir:
Yukarıdaki kod gösterildiği gibi hem on, hem de catch veya ikisini birden kullanabilirsiniz. on, istisna türünü belirtmeniz gerektiğinde kullanılır. catch, istisna işleyicinizin istisna nesnesine ihtiyaç duyduğu durumlarda kullanılır.
catch() metoduna bir veya iki parametre belirleyebilirsiniz. İlk parametre fırlatılan istisnadır, ikinci parametre ise stack trace'i temsil eden bir StackTrace objesidir:
Bir istisnayı kısmen ele alıp, onun yayılmasına izin vermek için rethrow anahtar kelimesini kullanabilirsiniz.
Finally (En Sonunda)
Herhangi bir istisna fırlatılıp fırlatılmamasına bakılmaksızın belirli bir kodun çalışmasını sağlamak için finally bloğunu kullanabilirsiniz. Eğer hiçbir catch bloğu istisnayı eşleştirmezse, finally bloğu çalıştıktan sonra istisna yayılır:
finally bloğu, eşleşen catch bloklarından sonra çalışır:
Daha fazla bilgi için core library exception dokümantasyonuna göz atabilirsiniz.
Assert (İddia)
Geliştirme aşamasında, bir boolean koşulu false ise normal yürütmeyi bozmak için assert ifadesini kullanabilirsiniz:
Bir assert ifadesine bir mesaj eklemek için, assert'e ikinci argüman olarak bir dize ekleyebilirsiniz (isteğe bağlı olarak sondaki virgül ile):
assert'in ilk argümanı, bir boolean değere çözülebilen herhangi bir ifade olabilir. Eğer ifadenin değeri true ise, assert başarılı olur ve yürütme devam eder. Eğer false ise, assert başarısız olur ve bir istisna (AssertionError) fırlatılır.
Assert ifadeleri ne zaman çalışır? Bu, kullandığınız araçlara ve çerçevelere bağlıdır:
Flutter, hata ayıklama modunda assert'leri etkinleştirir.
Webdev serve gibi yalnızca geliştirme araçları genellikle varsayılan olarak assert'leri etkinleştirir.
Bazı araçlar, dart run ve dart compile js gibi, assert'leri --enable-asserts komut satırı bayrağı ile destekler.
Üretim kodunda, assert'ler yok sayılır ve assert'in argümanları değerlendirilmez.
Last updated