Next Previous Contents

30. <4.2.1>: Attributter

Ruby lar deg ikke få tak i et objekts attributter (felter, dataverdier, instansvariable) direkte. Alle attributter er "private". Enhver tilgang går via metodekall, såkalte get/set metoder.

  1| # Vi vil bruke Person-klassen videre
  2| require 'klasse1.rb' 
  3| 
  4| # Klasser er "åpne" skop, og kan enkelt utvides.
  5| class Person  
  6|   # Ruby tillater deg ikke å få tak i attributtene
  7|   # fra utsiden av objektet. Du må gå via metodekall.
  8| 
  9|   #  get-metode
 10|   def alder
 11|     @alder
 12|   end
 13|   # set-metode
 14|   def alder=( ny_alder )
 15|     @alder = ny_alder
 16|   end
 17| 
 18|   # tungvint? Jepp, så Ruby har en snarvei:
 19|   attr_accessor :alder     # definerer metodene over automatisk
 20| 
 21|   # Vi vil også gjerne kunne lese navnene til personen
 22|   attr_reader   :etternavn, :fornavn
 23| 
 24| end
 25| 
 26| if __FILE__ == $0 # Kun når vi kjører denne filen:
 27|   p = Person.new( "Nordmann", "Baby" )
 28|   p.alder = 3     # Vi setter alderen
 29|   puts p.alder    #=> 3
 30|   p.alder += 1    # Øk alderen med et år
 31|   puts p.alder    #=> 4
 32|   puts p.fornavn  #=> "Baby"
 33| end

:alder, :etternavn, :fornavn

Disse er symboler. (instanser av Symbol-klassen) De ligner litt på String, men kan ikke endres, de er "internert" og begrenser seg til lovlige navn på klasser, metoder, variabler o.l. (Symbolet for instans-variabelen @alder, metoden alder og den lokale variabelen alder er alle sammen :alder.)

attr_accessor, attr_reader, attr_writer

Dette er metoder i Module-klassen som lager get/set metoder for deg. Som argument tar de symbolene til attributtene du vil lage get/set metoder for.


Next Previous Contents