27. 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ı ve amacımız genel bir inspect yöntemi oluşturmaktı. Ruby örnek değişkenlerin her zaman hazırlanmış olduğunu garanti eden bir yol sunuyor.

27.1. initialize yöntemi

Ruby yeni bir nesne örneklendiği 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
    |       @çeşidi = "elma"
    |       @nitelik = "olgun"
    |    end
    | end
   :initialize
ruby> f4 = Meyve.new
   "olgun elma"

27.2. Ö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 bağımsız değişken ekleriz. Burada bahsetmeyeceğimiz nedenlerden dolayı new'e verdiğiniz her bağımsız değişken initialize yöntemi tarafından alınmış olur.

ruby> class Meyve
    |    def initialize( k )
    |       @çeşidi = k
    |       @nitelik = "olgun"
    |    end
    | end
   :initialize
ruby> f5 = Meyve.new "mango"
   "olgun mango"
ruby> f6 = Meyve.new
ERR: wrong number of arguments (given 0, expected 1)

27.3. Esnek ilklendirme

Yukarıda gördüğümüz gibi bir bağımsız değişkeni 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" )
    |       @çeşidi = k
    |       @nitelik = "olgun"
    |    end
    | end
   :initialize
ruby>  f5 = Meyve.new "mango"
   "olgun mango"
ruby>  f6 = Meyve.new
   "olgun 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 bağımsız değişken listesine izin verir.