27. Nesnenin İlklendirilmesi
- 27.1.
initialize
yöntemi - 27.2. Öntanımlı değerlerin değiştirilmesi
- 27.3. Esnek ilklendirme
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.