İstisna işlemleri: ensure
Önceki
İçindekiler
İçindekiler
Nesne Hazırlama
Sonraki

 Ruby Kullanıcı KılavuzuErişgeçler (accessors) 

Erişgeç (accessor) nedir?

Geçtiğimiz bölümlerde örnek değişkenlerden kısaca bahsettik ancak henüz işimiz bitmedi. Bir nesnenin örnek değişkenleri onun kendisine ait olan ve aynı sınıfa ait diğer nesnelerden ayıran özellikleridir. Bu öznitelikleri okuyabilmek ve yazabilmek önemlidir; bu yüzden erişgeç nitelikleri (attribute accessors) denilen metodu kullanırız. Bir kaç dakika sonra erişgeç metotlarını her zaman açıkça yazmak zorunda olmadığımızı göreceksiniz ancak şimdilik tüm devinimlere bakalım. writers ve readers iki tür erişgeçtir.

ruby> class Fruit
    |   def set_kind(k)  # bir writer
    |     @kind = k
    |   end
    |   def get_kind     # bir reader
    |     @kind
    |   end
    | end
   nil
ruby> f1 = Fruit.new
   #<Fruit:0xfd7e7c8c>
ruby> f1.set_kind("peach")  # writer'ı kullan
   "peach"
ruby> f1.get_kind           # reader'ı kullan
   "peach"
ruby> f1                    # nesneyi incele
   #<Fruit:0xfd7e7c8c @kind="peach">

Yeterince basit; baktığımız meyve hakkında istediğimiz bilgiyi yerleştirebilir ya da erişebiliriz. Ama metot isimlerimiz biraz uzun. Aşağıdaki daha kısa ve daha konvansiyonel:

ruby> class Fruit
    |   def kind=(k)
    |     @kind = k
    |   end
    |   def kind
    |     @kind
    |   end
    | end
   nil
ruby> f2 = Fruit.new
   #<Fruit:0xfd7e7c8c>
ruby> f2.kind = "banana"
   "banana"
ruby> f2.kind
   "banana"

inspect metodu

Küçük bir uzlaşma sağlanmıştır. Bir nesneye direkt ulaşmak istediğimizde #<anObject:0x83678> gibi şifreye benzer birşeyle karşılaştığımıza dikkat edin. Bu varsayılan bir davranıştır ve istediğiniz gibi değiştirebilirsiniz. Yapmanız gerek tek şey inspect metodunu eklemektir. inspect metodu, nesneyi birkaç ya da bütün örnek değişkenleri de içeren ve mantıklı bir şekilde tanıtan bir metottur.

ruby> class Fruit
    |   def inspect
    |     "a fruit of the " + @kind + " variety"
    |   end
    | end
   nil
ruby> f2
   "a fruit of the banana variety"

Benzer bir metot da ekrana bir nesne yazdıracağımız zaman kullandığımız to_s (stringe dönüştürür) metodudur. Genel olarak inspect metodunu program yazarken ve hata ayıklarken kullandığınız bir araç olarak, to_s'yi de programın çıktısını düzeltmek için kullandığımız bir yol düşünebilirsiniz. eval.rb sonuçları görüntülemek için her zaman inspect metodunu kullanır. p metodunu, programlarınızdan hata ayıklama çıktısı almak için kullanabilirsiniz.

# Aşağıdaki iki satır eşittir:
p anObject
print anObject.inspect, "\n"

Erişgeçleri kolay hale getirmek

Her örneğin bir erişim metoduna ihtiyaç duymasına rağmen, Ruby standart formlar için daha elverişli bir yol sunar.

Kısayol İşlevi
attr_reader :v def v; @v; end
attr_writer :v def v=(value); @v=value; end
attr_accessor :v attr_reader :v; attr_writer :v
attr_accessor :v, :w attr_accessor :v; attr_accessor :w

Şimdi bunun avantajlarından faydalanalım ve bilgimizi tazeleyelim. Öncelikle otomatik olarak oluşturulmuş bir reader ve writer olup olmadığına bakarız ve yeni bilgiyi inspect'in içine dahil ederiz:

ruby> class Fruit
    |   attr_accessor :condition
    |   def inspect
    |     "a " + @condition + @kind"
    |   end
    | end
   nil
ruby> f2.condition = "ripe"
   "ripe"
ruby> f2
   "a ripe banana"

Meyveyle biraz daha eğlence

Eğer kimse olgunlaşmış meyvemizi yemezse, parasını almak için beklemeliyiz.

ruby> class Fruit
    |   def time_passes
    |     @condition = "rotting"
    |   end
    | end
   nil
ruby> f2
   "a ripe banana"
ruby> f2.time_passes
   "rotting"
ruby> f2
   "a rotting banana"

Ancak buralarda oynarken, küçük bir sorunla karşılaştık. Üçüncü bir meyve yaratmaya çalıştığımızda ne olur? Örnek değişkenlerin onlara değer atanmadan var olmadıklarını hatırlayın.

ruby> f3 = Fruit.new
ERR: failed to convert nil into String

Burada yakınılan inspect metodudur, ve geçerli bir sebebimiz var. f3'e özellik atamadan bir parça meyvenin türü ve durumu hakkında bir rapor istedik. Eğer istersek, inspect metodunu, defined? metodunu da kullanarak sadece tanımanmış meyveleri rapor etmesini sağlayabiliriz ancak bu iş hala kullanışsız olur, çünki her meyvenin bir türü ve durumu olduğuna göre bu ikisinin her zaman tanımlı olduğundan emin olmamız gerekir. Bu ilerki bölümün konusudur. /p>


İstisna işlemleri: ensure
Önceki
İçindekiler
İçindekiler
Nesne Hazırlama
Sonraki