Programmering 1 för gymnasiet med ruby/Variabler, datatyper och filer

From Wikibooks
Jump to navigation Jump to search


Heltal eller flyttal (decimaltal)?[edit]

Man räknar oftast med heltal, men decimaltal kan vara bra att ha t.ex. när man räknar pengar för att hålla reda på ören. På fackspråk kallas decimaltal för flyt-tal. Exempel på heltal är:

5
-205
9999999999999999999999999
0
1_000_000

Som du ser kan heltal vara både positiva och negativa. Om du vill ha mellanrum i talen kan du ha underscore (_) mellan delarna. Ruby tar bort dem av sig själv.

Exempel på decimaltal är:

54.321
0.001
-205.3884
0.0
1_000_000.000001

Decimaltal kan också vara negativa. Observera att man använder en punkt "." och inte ett komma "," för att skilja på heltalsdelen och den del som inte är ett heltal.

Enkel matematik[edit]

Ruby använder sig av de fyra räknesätten med följande symboler:

+ = addition
- = subtraktion
* = multiplikation
/ = division

Vill vi räkna olika decimaltal skriver vi t.ex:

puts 1.0 + 2.0
puts 2.0 * 3.0
puts 5.0 - 8.0
puts 9.0 / 2.0

Svaren vi får ut på skärmen blir:

3.0
6.0
-3.0
4.5

Om vi istället räknar olika heltal skriver vi:

puts 1+2
puts 2*3
puts 5-8
puts 9/2

Svaren vi får ut på skärmen blir:

3
6
-3
4

Det stämmer väl ganska bra, eller? vad blir egentligen 9 delat i två? Blir det 4? Möjligen om man delar godis med lillebror, men det är inte korrekt matematik, det borde bli 4.5 och orsaken till det är att vi matar in heltal. Då får vi också ut heltal. Ruby förvandlar decimaltalet till et heltal genom att avrunda det neråt till närmaste heltal. Om vi vill ha ett decimaltal i svaret måste vi också mata in decimaltal, annars kan det bli fel.

Använda text[edit]

När du använder text måste den innesluts i enkelt- elle dubbelt citattecken.

'innesluten i enkelt citattecken'
"innesluten i dubbelt citattecken"

Om du vill använda samma citattecken inuti texten måste du undanta det med en \.

'That\'s what I\'ll do'
"Han heter Joakim men kallas \"Korven\""

Långa textstycken[edit]

Ibland kanske man vill skriva in en lång text på glera rader i ett enda svep:

mintext = <<HELA_TEXTSTYCKET
All text som finns mellan '<<' 
och ett till av samma namn 
som fanns bakom '<<' tecknen
behandlas som en enda lång text.
HELA_TEXTSTYCKET
puts mintext

Inbäddad text #{}[edit]

Ruby ger stöd för inbäddad text i koden där man lägger in en variabel som har fått ett textvärde. Inbäddad text och inbäddade variabler fungerar inte om du använder dig av enkla citattecken, det fungerar bara i text som är innesluten i dubbla citattecken.

namn = "Zlatan"
hej = "Hejsan #{namn}" 

Den koden ger

Hejsan Zlatan

Man kan även bädda in uträkningar i texten på samma sätt så att enbart resultatet syns på skärmen.

multiplikation = "25 x 8 = #{25 * 8}" 
puts multiplikation

Den koden ger:

25 x 8 = 200

Escape tecken \[edit]

Inuti text kan man lägga till olika osynliga tecken som påverkar hur texten skrivs ut. Det vanligaste är \n som betyder ny rad.

puts "Det här är en rad\noch här är en till"

Denna kodsnutt ger:

Det här är en rad
och här är en till

Det finns en stor mängd liknande tecken för olika situationer, men de används ungefär på samma sätt.

En variabel, olika innehåll[edit]

En stor skillnad i ruby, jämfört med C++ och Java, är att en variabel kan innehålla vad som helst. Ta t.ex. den här koden:

glass = 'En stor ' + 'glasstrut' + ' för '
print glass
glass = 12
print glass
glass = ' kronor!'
print glass

Ger: En stor glasstrut för 12 kronor!

Variabeln glass tilldelades först text, sedan heltal för att sedan återigen tilldelas text. Att en variabel kan ändras på det här sättet är en fantastisk styrka i ruby och något som underlättar kodningen en hel del.

Allting i ruby är objekt, och det är något som ställer till en hel del problem för de som kommer från C++ eller Java världen. Här är ett enkelt, styggt exempel på hur värden ändras i ruby: var1 = 8 var2 = 0 var2 = var1 var1 = var1 +5 puts var1 puts var2 (fast det här blev ju inte fel?)

Exempel på hur man använder enkla kontroller i Tk[edit]

Tk är ett rätt avancerat system, faktiskt så avancerat att det finns böcker som bara täcker tk och inte programmering. Här följer ett väldigt enkelt exempel som visar hur man kan ändra texten i en textruta genom att trycka på en knapp. Du fyller i ditt namn, klickar på knappen och du får en hälsning tillbaka.

Koden visar hur man skapar etiketter, textrutor och knappar, och redan med så litet kan man göra rätt avancerade program. Som du ser använder man inte längre puts, print eller gets i en grafisk Tk miljö utan du måste använda dig av textrutor och etiketter av olika sorter istället.


#!/usr/bin/env ruby
require 'tk' #Visar att tk biblioteket måste vara installerat

#Text i textruta
text_att_visa_textruta = "Skriv ditt namn här" 

#Main window skapas, själva huvudfönstret
root = TkRoot.new
root.title = "Test" #= texten som visas överst i fönstret

#Label - etikett skapas
TkLabel.new(root) do #Etiketten skapas inuti huvudfönstret som ju heter root
  text 'Vad heter du?' #Texten i etiketten
  pack { padx 15 ; pady 15; side 'left' } #Utplacering av etiketten
end

#Entry textruta skapas
entry = TkEntry.new(root) #skapas i huvudfönstret
variable = TkVariable.new #En variabel som skall skrivas in skapas
entry.textvariable = variable #och ges till textrutan
variable.value = text_att_visa_textruta #som sedan kan visa upp den
#Utplacering av textrutan
entry.place('height' => 25, 
           'width'  => 150,
           'x'      => 10,
           'y'      => 20)

#Button - Knappen skapas
btn_OK = TkButton.new(root) do # i root, huvudfönstret
 text "OK" #Text på knappen
 borderwidth 5 #knappens kant
 underline 0
 state "normal"
 font TkFont.new('times 10 bold')
 foreground  "red"
 activebackground "blue"
 relief      "groove"
#Här beskrivs vad som händer när den klickas
 command (proc {
                #Texten i rutan får ett extra hej
                text_att_visa_textruta = 'Hej ' + variable.value
                variable.value = text_att_visa_textruta
                }
               )
  pack("side" => "right",  "padx"=> "50", "pady"=> "40")

end

#Håller fönstret öppet
Tk.mainloop

Källor till avsnittet:

http://pine.fm/LearnToProgram/?Chapter=01