Merhaba,Javada assertion hangi durumlarda kullanılır,kullanılma sebebi nedir?Ve neden public metodlarla kullanılması önerilmiyor?

soruldu: 07 Tem '14, 03:11

mensure%20resulzade's gravatar image

mensure resulzade
668913
cevap kabul oranı: 0%


Assertion’lar yazılımcıların yazdıkları metotlardan dönen değerleri test etmek ve uygulamaların anormal çalıştığı durumlarda programı sonlandırmak için kullanılır. İki formu vardır :

assert <boolean_expression> ; assert <boolean_expression> : <detail_expression> ;

Her iki durumda da boolean expression false olduğunda AssertionError fırlatılır. Error fırlatıldığı için yakalanamaz ve programın çalışması sonlandırılır.

İkinci formda assertion raporlanırken sağ taraftaki tip String’e dönüştürülür. Eğer sağ tarafta bir metod çağrımı yapımışsa metodun String döndürmesi gerekir. Aksi takdirde hata oluşur.

Assert kelimesi dile sonradan eklendiği için 1.3 veya daha önceki versiyonlarla yazılmış olan kodda assertion kullanıldıysa derlenmeyecektir. JDK 1.3 için –source 1.3 komutu ile javac’a kodu derlemesi söylenebilir.

Assertion’ların programın durumunu değiştirecek bir yan etkisi yoktur. Programın normalin dışında çalışması sonucu uyarı vermek için kullanılır.

Assertionlar nerede ve neden kullanılır ?

Öncelikle programcının beklentilerini ve varsayımlarını doğrulamak için kullanılır. Assertionlar bu sebeple özellikle bakım aşamasında diğer programcılar kod üzerinde geliştirme yapmaya devam ederken çok anlamlıdır. Zaten genellikle uygulamanın kullanım aşamasında kapatılırlar.

Kullanıldıkları yerler :

· Bir if else bloğunda koşulun ne olması gerektiğini biliyorsak ve daima aynı kodun çalışacağından eminsek kullanabiliriz. Örnek :

if (x > 0) {
     // kod
} else {
     assert (x == 0);
     // x negatif olana kadar çalış
}

X’in “0” olduğunu varsayalım. if bloğuna girmeyecek ve kod, x sanki negatif bir sayıymış gibi çalışacaktır. Fakat negatif olmadığından kod yanlış çalışacaktır. Herhangi bir hata da olmayacağından neden yanlış çalıştığını bulmak da baya bir zahmetli olacaktır. Bunun yerine kodu yukarıdaki gibi yazarsak x’in “0” olduğunu ben biliyorum (diğer programcılar da) işlem yapmaya devam et anlamına gelecektir. Örneğin birisi kodu değiştirir ya da x, “0” dışında başka bir değer gelirse o zaman kod hata verecektir.

· Aşağıdaki gibi bir kodumuz olduğunu düşünelim.

switch (iskambil) {
    case Iskambil.KUPA: // ...
        break;
    case Iskambil.KARO: // ...
        break;
    case Iskambil.MACA: // ...
        break;
    case Iskambil.SINEK: // ...
        break;
    default: assert false : "Bilinmeyen iskambil kağıdı";
        break;
}

Bu şekildeki bir switch bloğunda tüm iskambil şekillerini yazdığımızı düşünerek kodun hiçbir zaman default bloğuna girmeyeceğini düşünebiliriz. Çalışma anında farklı bir durum oluşuyorsa program hata vererek duracaktır.

Assertion’ların kullanılmaması gereken yerler : Assertionlar public methodların parametrelerini test etmek için kullanılmazlar. Bunun yerine metoda gelen değerler kontrol edilerek exception fırlatılmalıdır. Sebebi ise assertion’ların çalışma anında tamamen kapatılabilmesidir. Böyle bir durumda assertion kullanmak parametreleri kontrol edememek anlamına gelir.

Ayrıca assertionlar içerisinde method da yazılmamalıdır. İkinci formu kullandığımızda ":" operatoründen sonra bir metot çağrımı yapılması tavsiye edilmez.

java -enableassertions MyProgram java -ea MyProgram

kodları ile assertionlar aktif hale getirilir. İhtiyaç kalmadığı durumlarda ise programın daha hızlı çalışması adına assertionlar kapatılabilir.

java -disableassertions MyProgram java -da MyProgram

Assertion'lar kullanılırken çalışma anında kodun bütününe etki edebilecek kod yazılmamalıdır.
kaynak

permanent link

cevaplandı: 07 Tem '14, 08:22

Sahil_H's gravatar image

Sahil_H
3.2k255461
cevap kabul oranı: 6%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×1

Soruldu: 07 Tem '14, 03:11

Görüntüleme: 743 kez

Son güncelleme: 07 Tem '14, 08:22

powered by BitNami OSQA