Ruby ile Gelişmiş Nesne Yönetimi
Merhabalar,
Bir önceki yazım olan Ruby ile Dosya İşlemleri'ne gelen yorum nedeni ile uzmanlara yönelik bir yazı yazma gereği hissettim. Bu yazımın amacı, çalışma zamanında ruby'nin nesneleri nasıl yönettiğini sizlerle paylaşmak. Öncelikle karşımıza çıkacak olan problemlerden biraz bahsedelim ve daha sonra bunların çözümlerini yapalım.
Örneğin; elimizde çok özel bir karakter setimiz olsun. Bu öyle bir karakter setiki, içerisinde "," ler ile ayrılmış olan Id'ler olsun "1200,12254,2554,2525,2527,2556" gibi. Ve biz bu string içerisinde Id'leri aramak istiyoruz. Hem de kolay bir şekilde aramak istiyoruz, her seferinde virgüller ile boğuşmak istemiyoruz, işte bunu istiyoruz :)
puts idList.include?("1225") # Yok ama 12254 nedeni ile bulur
class <<idList
def include?(value)
return ("," + self + ",").include?("," + value.to_s + ",")
end
end
puts idList.include?(12254) # Artık bulabilir :)
puts idList.include?(25278)
puts idList.include?(1200)
puts idList.include?(2525)
veya
puts idList.include?("1225") # Yok ama 12254 nedeni ile bulur
def idList.include?(value)
return ("," + self + ",").include?("," + value.to_s + ",")
end
puts idList.include?(12254) # Artık bulabilir :)
puts idList.include?(120078)
puts idList.include?(2525)
Görüldüğü gibi Ruby'de nesne genişletme ve/veya değiştirme işlemleri gerçekten çok kolay yapılabiliyor. Tüm bunların yanında, eğer gerçekten bir sınıfın tanımı tamamen değiştirmek istiyorsanız aşağıdaki örneğe bir göz atmanızı tavsiye ederim.
puts idList.include?("1225") # Yok ama 12254 nedeni ile bulur
class String
alias_method :old_include?, :include? # include?
def include?(value)
return ("," + self + ",").old_include?("," + value.to_s + ",")
end
end
puts idList.include?(12254) # Artık bulabilir :)
puts idList.include?(120078)
puts idList.include?(2525)
Yukarıda verdiğim örnekte yer alan alias_method :old_include?, :include? satırını açıklamam gerekiyor. Bu satırın yaptığı iş aslında basit fakat diğer dillerde pek de bulunmayan bir özellik olduğundan garip karşılanabilir. Bu satır include? methoduna old_include? adında bir takma ismini takar, böylece biz def include?(value) deyimi ile include? methodunu ezerken eski methoda olaran erişimimizi kaybetmemiş oluruz. Bu nedenle bizim yazdığımız method içerisinde old_include? deyimi ile eski include? methoduna erişim sağlarız.
Görüldüğü gibi herhangi bir sınıfının tamamı üzerinde veya herhangi bir anda yaratılmış, herhangi özel bir nesneye de çalışma zamanında müdahale edebilir, değişiklik yapabiliriz.
* Ek olarak .NET 2.0'da yeni bir özellik olarak eklenen "partial class" desteği, Ruby'de de mevcuttur. (Tüm sınıfların bu desteği vardır, herhangi bir anahtar sözcük ile tanımlama yapmaya gerek yoktur.)
Kolay gelsin :)

01.05.2007-14:24'de dedi şöyle dedi;
iyi günler ip uçlarınızı okdum ancak bilgisayarımdaki problemi hala çözemedim hala bana aynı idlist hatasını veriyor ve başlangıç menüsü dahil hiç bir program gözükmüyor sadece arka plan görünümde bunun bir çözümü var mı çok merak ediyorum
01.05.2007-17:14'de dedi şöyle dedi;
Ee, iyi günler, tam olarak anlamasamda, yorumu yaptığınız yazıdaki örnekleri tekrar denedim. Herhangi bir sorun ile karşılaşmadım. Aldığınız hatayı biraz daha detaylandırırsanız size yardımcı olabilirim..
Kolay gelsin..