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
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. |
Det er flere måter å kjøre Ruby-kode på, bl.a.:
ruby heiverden1.rb
irb
irb(main):001:0> load "heiverden1.rb"
Hei verden!
true
heiverden1.rb
filen.
#!/usr/bin/env ruby
chmod a+x heiverden1.rb
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
)
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.
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.
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.
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 string - lag en tekstlig representasjon av objektet, ikke ulikt Java sin toString()
.
Ruby har flere tallklasser:
Fixnum
- begrenset heltall.Bignum
- ubegrenset heltall (forutsatt uendelig minne).Float
- flyttall med begrenset presisjon.Andre tallklasser i standardbiblioteket:
Rational
- brøk.BigDecimal
- omtrent som BigNum
for flyttall.Complex
- komplekse tall.