Next Previous Contents

2. Vår første smakebit av Ruby-kode.

Eksemplene vises med linjenummer. (Disse er ikke en del av kildekoden.)
Det vil si, når det står

    12| puts "Hello"
er det
    puts "Hello"
som er kildekoden.

Kodelinjer er ofte annotert med en kommentar, #=>, som viser hva resultatet vil bli. (eller hva som skrives ut) For eksempel:

    5 + 2 #=> 7

2.1 Hei verden!

Hello World begynner å bli gammel og tynnslitt, så her har vi en litt mer komplisert variant:

  1| # Ett klassisk eksempel
  2| class Verden             # Definer en klasse...
  3|   def si_hei             # med en metode...
  4|     puts 'Hei verden!'   # som skriver ut litt tekst.
  5|   end
  6| end
  7| 
  8| verden = Verden.new      # Lag en instans av klassen.
  9| verden.si_hei            # Kall en metode på objektet.

Kjøre heiverden1.rb

Det er flere måter å kjøre Ruby-kode på, bl.a.:

2.2 Variabler

I Ruby har ikke en variabel noen statisk type. En variabel er bare et navn man forbinder med en referanse til et objekt. (Dette er den korte forklaringen på hva dynamisk typing er.)

  1| x = 'Norge'  # Se, jeg er en tekst-streng (String).
  2| x = [1,2,3]  # Øh, jeg mener en Array.
  3| x = 5        # Ups, nå er jeg en Fixnum.
  4| 
  5| # Tilordninger kan lenkes
  6| a = b = c = d = 5
  7| 
  8| # Du trenger ikke ekstra variable for å bytte to verdier
  9| x = 5
 10| y = 3
 11| x, y = y, x  # Nå er x = 3 og y = 5
 12| 
 13| # Ruby bruker prefiks for å angi variabel skop
 14| $global_variabel   = 'alle kan se meg!'
 15| lokal_variabel     = 'sånn som x, y, a, b, c etc.'
 16| @instans_attributt = 'jeg tilhører det gjeldende objekt.'
 17| @@klasse_attributt = 'jeg er felles for mange objekter.'
 18| KONSTANT_VARIABEL  = 'en selvmotsigelse?'

Attributter kalles også instansvariable eller felt.

Enhver variabel som begynner med stor forbokstav er konstant i Ruby. Konstant vil si at variabelreferansen er konstant, ikke at objektet ikke kan endre tilstand. (Ønsker du sistnevnte, prøv freeze)

2.3 Tekststrenger

Vi kunne ikke skrive ut "Hei verden!" uten å ha litt tekst.
I Ruby er tekststrenger instanser av klassen String.

  1| # String objekter kan instansieres
  2| navn = String.new("Ruby") # veldig eksplisitt, eller
  3| navn = "Ruby"             # implisitt
  4| 
  5| # Tekst kan adderes...
  6| fornavn   = 'Ola'
  7| etternavn = 'Nordmann'
  8| fullt_navn = etternavn + ', ' + fornavn 
  9| puts fullt_navn #=> "Nordmann, Ola"
 10| 
 11| #...multipliseres...
 12| "Ah!" * 2 + " Tsjo!" #=> "Ah!Ah! Tsjo!"
 13| 
 14| #...manipuleres...
 15| "Karakter fire".sub("fire", "en") #=>"Karakter en"
 16| "14.99".to_f #=> 14.99
 17| 
 18| #...inspiseres...
 19| "TEAMWORK".include?("I")  #=> false
 20| "Kulturuke".index("tur")  #=> 3 

Legg merke til at man kan skrive strenger både "slik" (med kråketær) og 'slik' (med apostrof). Disse to versjonene er ikke bare for syns skyld.

Mer om String

String-klassen i Ruby fungerer ikke slik som Java sin String-klasse, hvor man ikke kan endre et strengobjekt.

  1| # String objekter kan endres:
  2| navn = "Ola Nordmann"
  3| 
  4| # Kjønnsoperasjon?
  5| nyttnavn = navn.sub("Ola", "Oline")
  6| 
  7| # sub lager ett nytt String-objekt.
  8| puts nyttnavn #=> "Oline Nordmann"
  9| puts navn     #=> "Ola Nordmann"
 10| 
 11| # sub! (sub-bang) endrer selve strengobjektet
 12| nyttnavn = navn.sub!("Ola", "Oline")
 13| puts nyttnavn #=> "Oline Nordmann"
 14| puts navn     #=> "Oline Nordmann"

Legg merke til at sub generer et helt nytt String-objekt, mens sub! endrer det faktiske objektet.
Metoder som slutter med utropstegn kalles "bang" eller "destruktive" metoder da de endrer objektet.

Skrive ut tekst

Det er mer enn en måte å flå en katt på, og der er også mer enn en måte å skrive ut tekst i Ruby.

  1| # Tekst kan skrives ut
  2| navn = 'Kent'
  3| puts 'Jeg heter ' + navn + '.'
  4| 
  5| # Liker du ikke puts?
  6| print "De kaller meg " + navn + ".\n"
  7| 
  8| # Liker du C?
  9| printf "Mitt navn er %s.\n", navn
 10| 
 11| # Forelska i C++?
 12| STDOUT << "Dahl... " << 
 13|   navn << " Dahl.\n"
 14| 
 15| # Tekst-streng interpolering.
 16| puts "Jeg heter fremdeles #{navn}."
 17| puts "Jeg blir #{Time.now.year-1978} år i år."

Her ser vi hvorfor vi både bruker "kråketær" og 'apostrof' for å angi tekststrenger. Med kråketær kan vi escape tegn (slik som \n som betyr ny linje), og kjøre Ruby uttrykk inne i tekststrengen.

2.4 Tall.

Selv om tall også er objekter i Ruby, oppfører de seg normalt, og du må ikke vri hjernen din rundt sær syntaks.

  1| # Heltall
  2| a = 3
  3| b = 2
  4| c = a + b    #=> 5
  5| d = c / b    #=> 2
  6| 
  7| # Flyttall
  8| f = c.to_f / b #=> 2.5
  9| 
 10| # Tall er også objekter
 11| puts "tre og to er " + c.to_s
 12| -25.abs     #=> 25
 13| a.zero?     #=> false
 14| 0.zero?     #=> true
 15| a.next      #=> 4 

to_s

to string - lag en tekstlig representasjon av objektet, ikke ulikt Java sin toString().

Ruby har flere tallklasser:

Andre tallklasser i standardbiblioteket:


Next Previous Contents