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 fra utsiden til objektet går via metodekall, såkalte get/set metoder.

Instansvariable er "private" på en måte som er mer som protected i andre språk; metoder i sub- og superklasser har tilgang. Men andre instanser har ikke tilgang, selv ikke instanser av samme klasse.

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

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