4. Lær at programmere.

Så sætter vi det hele sammen 

 Så sætter vi det hele  sammen


Vi har set på nogle få forskellige objekter(tal og bogstaver) og vi har lavet variable som peger på dem. Det næste vi vil gøre er at få dem alle til at spille pænt sammen.
var1 = 2
var2 = '5'

puts var1 + var2

En del af problemet er at din computer ikke ved om du prøver at få resultatet '7'(2 + 5)  eller om du prøvede at få '25' ('2' + '5')

Før vi kan lægge disse sammen må vi på en eller anden måde lave var1 til en streng eller lave var2 til en integer.


Konverteringer


For at få et objekts streng version, skal man simpelthen skrive .to_s bagefter den:
var1 = 2
var2 = '5'

puts var1.to_s + var2

25

På samme måde giver .to_i integer versionen af et objekt og .to_f giver float versionen. Lad os se lidt nøjere hvad disse tre metoder gør (og ikke gør):

var1 = 2
var2 = '5'

puts var1.to_s + var2
puts var1 + var2.to_i

25
7


Læg mærke til at selv om vi fik fremkaldt strengversionen af var1 ved at kalde .to_s så pegede var1 hele tiden på 2 og aldrig på '2'. Med mindre vi udtrykkeligt gentildeler var1 (som kræver et = tegn) så vil den pege på 2 i hele programmets levetid.

Lad os nu se på flere interessante ( og nogle lidt  mærkelige ) konverteringer.

puts '15'.to_f
puts '99.999'.to_f
puts '99.999'.to_i
puts ''
puts '5 er mit farvorittal!'.to_i
puts 'Hvem spurgte egentlig om 5?'.to_i
puts 'Der gjorde din mor.'.to_f
puts ''
puts 'strenget'.to_s
puts 3.to_i

15.0
99.999
99

 
5
0
0.0

stringet
3

Det gav os muligvis nogle overraskelser. Den første er ret almindelig, det giver 15.0. Efter den konverterede vi strengen '99.999' til en float og til en integer. Floaten gjorde  som forventet, og integeren rundede ned, som den plejer.

Derefter har vi nogle ekspmpler på nogle ... usædvanlige strenge som bliver konverteret til tal. .to_i ignorerer det første den ikke forstår og resten af strengen.
. Så den første blev konverteret til 5, men de andre, fordi de startede med bogstaver, blev fuldstændig ignoreret, så computeren skriver  bare 0.
Til sidst så vi at de sidste to linier ikke gjorde noget som helst, lige som vi ville forvente.

 Et andet syn på 'puts'

 Der er noget underligt med vores farvorit metode ... Prøv at se her:

puts 20
puts 20.to_s
puts '20'

20
20
20

Hvorfor printer alle disse tre det samme ? Jo, de sidste to burde gøre det, fordi 20.to_s er '20'. Men hvad med den første, integeren 20 ? Hvad betyder det egentlig at man vil udskrive en integer. Når man skriver 2 og derefter 0 på et stykke papir  skriver man en streng, ikke en integer. Integeren 20 er antallet af fingre og tæer jeg har. Det er ikke 2 effterfulgt af et 0.

Men her er hemmeligheden bag vores ven, 'puts': Før puts forsøger at udskrive et objekt,bruger den to_s til at få strengversionen af objektet. Faktisk står det sidste 's' i 'putts' for streng - puts betyder i virkeligheden 'put string'.

Det lyder måske ikke så spændende ligenu, men der er mange mange slags objekter i ruby (du vil endog lære hvordan du selv kan lave nogen ). Og det et godt at vide hvad der vil ske hvis du prøver at 'puts' et virkeligt mærkeligt objekt såsom et billede af din mormor eller en musikfil eller lignende. Men det kommer vi til senere...

I mellemtiden har vi lidt flere metoder til dig og de vil give os mulighed for at skrive en masse sjove programmer...

Metoderne gets og chomp


Hvis puts betyder put streng, er jeg sikker på at du kan gætte hvad 'gets' står for. Og ligesom puts altid spytter en streng ud. vil gets altid modtage en streng. Og hvorledes skaffer den sig dem ?

Fra dig! Ja, altså fra dit keyboard. Keyboardet laver kun strenge så det virker fint. Hvad der faktisk sker er, at 'gets' bare sidder og læser hvad du skriver indtil du trykker på Enter. Lad os prøve det:

puts gets

er der et ekko herinde?
er der et ekko herinde?

Selvfølgelig vil alt hvad du skriver bare blive skrevet tilbage til dig. Kør det nogle gange og prøv at skrive det nogle forskellige ting.
Nu kan vi lave interaktive programmer. I den næste skriver du dit navn og den hilser dig tilbage: 

 puts "Goddag, hvad hedder du ?"

navn = gets

puts "Er det dig, der hedder  " + navn + "? \n Dejligt navn!" 

puts "Det var sjovt at møde dig, " + navn + " :-)"

 Øv, jeg kørte lige programmet  -jeg skrev mit havn og så kom der dette ud af det :  

Goddag hvad hedder du ?

gunner

Er det dig ,der hedder gunner

? Dejligt navn!

Det ar sjovt at møde dig gunner

:-)  

Hmmm,  det ser ud til at når jeg skriver bogstaverne g u n n e r og så trykker enter  så modtager gets både bogstaverne OG 'enter'. ! Heldigvis er der en metode til at afhjælpe dette: chomp. Den fjerner alle 'enter' som sidder sidst i din streng. Lad os prøve programmet igen men denne gang bruge chomp:

 

 puts "Goddag, hvad hedder du ?"

navn = gets.chomp

puts "Er det dig, der hedder  " + navn + "? \n Dejligt navn!" 

puts "Det var sjovt at møde dig, " + navn + " :-)"

 

Goddag hvad hedder du ?

gunner

Er det dig, der hedder gunner? Dejligt navn!

Det ar sjovt at møde dig gunner  :-)

Meget bedre!  Læg mærke til at når 'navn'  peget på  gets.chomp, behøver vi aldrig at sige navn.chomp; navn er allerede chomp'et. 

Prøv disse ting

  • Skriv et program som først beder om en persons fornavn, så mellemnavn og så til sidst efternavn. Til sidst skal det sige hej til personens fulde navn.
  • Skriv et program som beder om en persons farvorittal.  Få programmet til at lægge 1 til dette og sig så til personen at dette tal er både større og bedre. (Vær dog ikke fræk)

Så snart du har skrevet disse to programmer (og andre som du selv har lyst til at lave)  kan du gå videre og lære noget om metoder.

Af Chris Pine

oversat af Gunner Carstens

Original tekst

Indledning

Kapitel 1 - Tal

Kapitel 2 -Bogstaver

Kapitel 3 Variable og tildelinger

Kapitel 4 Blande det hele sammen

Kapitel 5 Mere om metoder

Kapitel 6 Kontrol med strømmen

Kapitel 7 Sæt og Gentagere

Kapitel 8 Skriv dine egne metoder

Kapitel 9 Klasser

Kapitel 10 Blokke og Procs

Kapitel 11 Hvad nu?

Opgavedel til kapitel 4