Nesneye yönelik düşünme
Önceki
İçindekiler
İçindekiler
Sınıflar
Sonraki

 Ruby Kullanıcı KılavuzuMetotlar 

Metot nedir? Nesneye yönelik programlamada, nesnenin dışından direkt veri üzerinde işlem yapmak yerine (eğer nazikçe böyle yapmalarını söylerseniz) nesnelerin kendilerini nasıl çalıştıracakları hakkında bilgiye sahip olması tercih edilir. Nesnelere mesajlar gönderdiğimizi ve bunların genelde bir olay tarafından gerçekleştirildiğini ya da anlamlı bir cevapla karşılandığını söyleyebilirsiniz. Bu muhtemelen bizim özellikle bilmemizi gerektiren ya da nesennin kendi içinde nasıl çalıştığına dikkat etmemizi gerektirmeyen bir olaydır. Bir nesneye gerçekleştirmesi için (ya da anlayacağı mesahlar göndermemiz için) izinli olduğumuz görevlere, nesnenin metotları denir.

Ruby'de bir nesenin metodunu nokta notasyonuyla çağırırız (C++ ya da Java'da olduğu gibi).

ruby> "abcdef".length
   6

Muhtemelen bu string'in uzunluğunun ne kadar olduğu soruluyor. Teknik olarak,"abcdef" nesnesi için length metodunu çağırıyoruz.

Diğer nesnelerin length metodu için biraz farklılıkları olabilir, ya da hiç olmayabilir de. Mesajlara nasıl cevap verileceği kararı programın çalıştırılması sırasında verilir, ve hangi nesnenin başvurduğuna bağlı olarak olay değişebilir.

ruby> foo = "abc"
   "abc"
ruby> foo.length
   3
ruby> foo = ["abcde", "fghij"]
   ["abcde", "fghij"]
ruby> foo.length
   2

length metodunun, nesneye göre değişebilmesiyle neyi kastediyoruz? Yukarıdaki örnekte ilk önce foo'nun uzunluğunu soruyoruz, basit bir dizgiye başvuruyor ve sadece tek bir mantıklı cevabı olabilir. İkinci sefer foo bir diziye başvuruyor ve uzunluğunun 2, 5 ya da 10 olduğunu düşünebilirsiniz ama genelde en kabul edilebilir cevap tabii ki 2 olacaktır.

ruby> foo[0].length
   5
ruby> foo[0].length + foo[1].length
   10

Burada dikkat edilmesi gereken nokta bir dizinin, dizi olmanın ne demek olduğunu bilmesidir. Ruby'de veri parçaları beraberlerinde bilgi taşıdıkları için talepler otomatik olarak algılanabilir ve bir çok yolla gerçekleştirilebilir. Bu programcıyı, spesifik fonksiyon adlarını hatırlamaktan kurtarır. Nesneye yönelik programlamanın bu özelliği polimorfizm olarak adlandırılır.

Bir nesne anlamadığı bir mesaj aldığında bir hata "meydana gelir":

ruby> foo = 5
   5
ruby> foo.length
ERR: (eval):1: undefined method `length' for 5(Fixnum)

Sonuçta bir nesne için hangi metotların kabul edilebilir olduğunu bilmemiz geretiği halde, metotların nasıl işlendiğini bilmek zorunda değiliz.

Eğer argümanlar bir metota verilecekse genelde parantezler tarafından çevrilirler.

object.method(arg1, arg2)

Ancak belirsizlik ihtiva etmedikleri sürece kullanılmayabilirler de.

object.method arg1, arg2

Ruby self adında; ne zaman bir nesne bir metodu çağırdığı zaman başvurulan özel bir değişkene sahiptir. Rahatlık için "self." genelde metot çağrılırken kullanılmayabilir:

self.method_name(args...)

yukarıdaki ifadeyle aşağıdaki aynıdır:

method_name(args...)

Bir fonksiyon çağrısı sadece self'le metot çağrımının kısaltılmış şeklidir. Bu da Ruby'yi saf bir nesneye yönelik programlama dili yapan şeydir.


Nesneye yönelik düşünme
Önceki
İçindekiler
İçindekiler
Sınıflar
Sonraki