Yordam Nesneleri
Önceki VI. Oylum - Ruby Kullanıcı Kılavuzu Sonraki
Yordam Nesneleri
Beklenmeyen durumlara cevap verebilme genelde istenen bir durumdur. Eğer diğer yöntemlere kod bloklarını argüman olarak geçebilirsek yani koda bir veriymiş gibi davranabilirsek bu işi oldukça kolaylaştırmış oluruz.
Yeni bir yordam nesnesi, proc kullanılarak oluşturulur:
ruby>   guguk = proc {
    |    print "GUGUKGUGUKGUGUK!!!\n"
    |  }
   #<Proc:0x4017357c>
Artık guguk bir nesne belirtiyor ve onun da diğer nesneler gibi istenebilir davranışları vardır. call yöntemi sayesinde bu davranışları talep edebiliriz:
ruby>   guguk.call
GUGUKGUGUKGUGUK!!!
   nil
Peki tüm bunlardan sonra, guguk bir yöntem argümanı gibi kullanılabilir mi? Tabii ki.
ruby>   def run( p )
    |    print "Bir yordamı çağırıyoruz...\n"
    |    p.call
    |    print "Bitti.\n"
    |  end
   nil
ruby>   run guguk
Bir yordamı çağırıyoruz...
GUGUKGUGUKGUGUK!!!
Bitti.
   nil
trap yöntemi aldığımız cevabı tercihimize göre istediğimiz sistem sinyaline atamamıza izin verir.
ruby>   inthandler = proc{ print "^C basıldı.\n" }
   #<Proc:0x401730a4>
ruby>   trap "SIGINT", inthandler
   #<Proc:0x401735e0>
Normalde ^C'ye basmak yorumlayıcıdan çıkmamızı sağlar. Ancak şimdi bir ileti yazıldı ve yorumlayıcı hala çalışmaya devam ediyor, böylece yaptığınız işi kaybetmemiş oluyorsunuz. (Yorumlayıcıda sonsuza dek kapana kısılmadınız, hala exit yazarak ya da ^D'ye basarak çıkabilirsiniz.)
Başka konulara geçmeden önce son bir not: bir yordamı bir sinyale bağlamadan önce ona illa ki isim vermek gerekli değildir. Anonim bir yordam nesnesi aşağıdaki gibi olabilir:
ruby>   trap "SIGINT", proc{ print "^C basıldı.\n" }
   nil
daha kısa şekilde,
ruby>   trap "SIGINT", 'print "^C basıldı.\n"'
   nil
Bu kısaltılmış biçim, küçük anonim yordamlar yazdığınızda okunabilirlik sağlar.
Önceki Üst Ana Başlık Sonraki
Modüller Başlangıç Değişkenler
Bir Linux Kitaplığı Sayfası