Konunun Geçmişi:
Assert mekanizması, Java 1.4'te geliştiricilerin kodları içinde mantıksal hataları ve varsayımları teşhis etmek için eklendi. Assert, çalışma zamanında beklenen ve gerçek değerler arasındaki tutarsızlıkları, açık bir thrown istisnası olmadan tespit etmeyi sağladı ve assert desteği kapalı olduğunda uygulamanın nihai sürümüne dahil edilmedi.
Problem:
Normal hata kontrolleri (örneğin, kullanıcı girdisi kontrolleri) yerine assert kullanımının aşırıya kaçması ve çalışma sunucusunda devre dışı bırakılma durumunun anlaşılmaması, hataların gözden kaçmasına neden olabilir.
Çözüm:
Assert, programın düzgün çalışması durumunda ihlal edilmemesi gereken mantıksal invariantlar için yalnızca uygulanır; ancak, ihlal durumunda uygulama kesinlikle hatalı bir şekilde davranır.
Kod örneği:
public int divide(int a, int b) { assert b != 0 : "Bölücü sıfır olmamalıdır!"; return a / b; }
Anahtar özellikler:
Java programı başlatıldığında assert varsayılan olarak çalışır mı?
Cevap: Hayır, varsayılan olarak assert kapalıdır. Açıkça -ea (enable assertions) bayrağı ile etkinleştirilmelidir.
Assert, üretim kodunda kullanılabilir mi?
Cevap: Tavsiye edilmez, çünkü assertionError basitçe göz ardı edilebilir. Assert yalnızca invariantlar ve test kodu için kullanılabilir.
Assert ile istisna atma arasındaki fark nedir?
Cevap:
Programcı, kullanıcıların yanlış değerlerle kritik bir hata yaratmasına izin vererek, web uygulamasının veri girişini kontrol etmek için assert kullanır.
Artılar:
Eksiler:
Assert, algoritmadaki iç invariantlar için yalnızca kullanılır, kullanıcı için tüm kontroller normal istisnalarla gerçekleştirilir.
Artılar:
Eksiler: