İstisna işlemleri: rescue
Önceki
İçindekiler
İçindekiler
Erişgeçler
Sonraki

 Ruby Kullanıcı Kılavuzuİstisna işlemleri: ensure 

Bazen bir metot işini bitirdikten sonra temizlik yapılması gerekebilir. Örneğin açılmış olan bir dosyanın kapatılması ya da bir veri için ayrılan bellek gözünün boşaltılması gerekebilir. Eğer her metot için her zaman tek bir çıkış noktası olsaydı temizleme kodumuzu tek bir yere koyardık ve çalıştırılacağından emin olurduk. Ancak metot bir çok yere geri dönebilir ve temizlik kodumuz beklenmeyen istisnalardan dolayı atlanabilir.

begin
  file = open("/tmp/bir_dosya", "w")
  # ... dosyaya yaziliyor...
  file.close
end

Ayrıca eğer kodun dosyaya yazdığımız kısmında bir istisna meydana gelirse o zaman dosya açık bırakılabilir. Ve böyle bir fazlalığa gitmek istemeyiz:

begin
  file = open("/tmp/bir_dosya", "w")
  # ... dosyaya yazdiriliyor ...
  file.close
rescue
  file.close
  fail # istisna yakalaniyor
end

Bu hantal bir yöntemdir; her return ve break ile ilgilenmek zorunda kaldığımız için işler çığrından çıkar.

Bu yüzden "begin...rescue...end" şemasına ensure adında başka bir anahtar kelime daha ekleriz. ensure kodu begin kodunun başarılı olup olmadığına bakmaksızın çalıştırılır.

begin
  file = open("/tmp/bir_dosya", "w")
  # ... dosyaya yaziliyor ...
rescue
  # ... istisnalar yakalaniyor ...
ensure
  file.close   # ....her zaman yapilmasi gerekir
end

ensure kodunu rescue olmadan da kullanmak mümkündür ya da tam tersi; ancak aynı begin...end bloğunda birlikte kullanılıyorlarsa rescue, ensure'dan önce gelmelidir.


İstisna işlemleri: rescue
Önceki
İçindekiler
İçindekiler
Erişgeçler
Sonraki