Nesnenin İlklendirilmesi

Geçen bölümdeki Meyve sınıfı, biri meyvenin çeşidini diğeri de niteliğini açıklayan iki örnek değişkene sahipti. Bunu yapmamızın nedeni bir kaç meyve için karakteristiğin önemli olmamasıydı. Genel bir inspect yöntemi oluşturmaktı. Ruby örnek değişkenlerin her zaman hazırlanmış olduğunu garanti eden bir yol sunuyor.

initialize yöntemi

Ruby yeni bir nesne yaratıldığı zaman initialize denen bir yöntem arar ve çalıştırır. Yapabileceğimiz basit şeylerden biri her örnek değişkene öntanımlı bir initialize yöntemi koymak ve böylece inspect yöntemine söyleyebilecek bir şeyler sağlamaktır.

ruby>   class Meyve
    |    def initialize
    |      @cesit = "elma"
    |      @nitelik = "olgun"
    |    end
    |  end
   nil
ruby>   f4 = Meyve.new
   "olgun bir elma"

Öntanımlı değerlerin değiştirilmesi

Bazen öntanımlı değerlerin pek de anlamlı olmadığı zamanlar olabilir. Öntanımlı bir meyve çeşidi gibi birşey olabilir mi? Her meyvenin yaratıldığı zaman kendi çeşidini belirlemesi daha tercih edilebilir bir durumdur. Bunu yapmak için initialize yöntemine bir argüman ekleriz. Burada bahsetmeyeceğimiz nedenlerden dolayı new'e verdiğiniz her argüman initialize yöntemi tarafından alınmış olur.

ruby>   class Meyve
    |    def initialize( k )
    |      @cesit = k
    |      @nitelik = "olgun"
    |    end
    |  end
   nil
ruby>   f5 = Meyve.new "mango"
   "olgun bir mango"
ruby>   f6 = Meyve.new
ERR: (eval):1:in `initialize': wrong # of arguments(0 for 1)

Esnek ilklendirme

Yukarıda gördüğümüz gibi bir argümanı initialize yöntemi ile ilişkilendirirseniz boş değer vermeniz durumunda hatayla karşılaşırsınız. Daha düşünceli davranmak istersek, değer verildiği zaman o değeri kullanabilir, verilmediği zamansa öntanımlı bir değer atayabiliriz.

ruby>   class Meyve
    |    def initialize( k="elma" )
    |      @cesit = k
    |      @nitelik = "olgun"
    |    end
    |  end
   nil
ruby>   f5 = Meyve.new "mango"
   "olgun bir mango"
ruby>   f6 = Meyve.new
   "olgun bir elma"

Öntanımlı değerleri sadece initialize için değil tüm yöntemler için uygulayabilirsiniz.

Bazen bir nesneyi hazırlamak için birçok yol hazırlamak yararlı olabilir. Bu kılavuzun kapsamının dışında olmasına rağmen Ruby, yöntemleri aşırı yüklemeyi sağlayan nesne yansıtmaya (object reflection) ve değişken uzunluklu argüman listesine izin verir.