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.
Kode-linjer 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| # Denne er kjekk å ha når en metode vil returnere flere verdier 14| a,b,c = ['a','b','c'] 15| 16| # Ruby bruker prefiks for å angi variabel skop 17| $global_variabel = 'alle kan se meg!' 18| lokal_variabel = 'sånn som x, y, a, b, c etc.' 19| @instans_attributt = 'jeg tilhører det gjeldende objekt.' 20| @@klasse_attributt = 'jeg er felles for mange objekter.' 21| 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 variabel-referansen er konstant, ikke at objektet ikke kan endre tilstand.
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 eksplisit, 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 type, hvor man ikke kan endre et streng-objekt.
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 streng objektet 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 som oftest endrer objektet.
Ruby bruker denne konvensjonen for navngivelse på mange metoder.
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 "Jeg heter " + navn + ".\n" 7| 8| # Liker du C? 9| printf "Jeg heter %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 #{2002-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 |
Ruby har flere tallklasser:
require 'rational'
)
to string - lag en tekstlig representasjon av objektet, ikke ulikt Java sin toString()
.