Ruby ile BaÅŸlangıç – Hata Yakalama – 2

Marhabalar,

Daha önceki yazımızda belirttiğimiz hata yakalama sizlere yetmemiş olabilir. Bazı durumlarda tüm bu hata yakalama işlemlerinden daha sert bir şeye ihtiyacınız olabilir. İşte bu yazının yazılma nedeni bu :)

Bir önceki yazımızda, diğer dillerde yer alan try..catch..finally kavramını tamamen destekleyen hatta fazlasını veren begin..rescue..else..ensure kavramı ile tanışmıştık. Daha fazla bilgi için.

Bu yazımızda daha önceden de belirttiğimiz gibi daha sert bir kavramı inceleyeceğiz.
catch..throw
Hemen örneğimizi verelim;
[ruby]
$stdout.sync = true
catch (:hata_test) do
begin
field = gets.chomp
throw :hata_test if field.index(“hata”) == 0
puts “Hata bulunamadı..”
end while 1 == 1
puts “Bu bölüm hiç iÅŸlenmeyecek.”
end
puts “Hata üretilmeden ‘catch’ bloÄŸundan çıkıldı..”
[/ruby]
Ruby programınızı çalıştırırken, throw deyimine rastladığında, en yakın uyumlu* catch‘e kadar yukarı çıkar. Ve catch bloÄŸunun iÅŸlenmesini sona erdirerek, bu bloktan sonraki kodları iÅŸlemeye baÅŸlar.

*throw deyimine parametre olarak bir deyim veya String verilebilir. Eğer bu parametre verilir ise, bu parametreye uygun olan catch yakalanmaya çalışır.

EÄŸer throw deyimi nedeni ile yukarıya doÄŸru giderken herhangi bir catch bulunamaz ise, `in throw’: uncaught throw `hata_adı’ (NameError) ÅŸekilde bir hata ile programımız sonlanır.

Görüldüğü gibi, begin..rescue..else..ensure deyimi gibi, catch..throw deyimini çeşitlendirmek pek kolay bir yöntem değil. Bu nedenle çok zorda kalmadığınızda kullanmayın. Ama sert ve keskin bir biçimde programın işlenmesini kesmek ve/veya yönünü değiştirmek istediğiniz kullanabilirsiniz.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir