Programmering 1 för gymnasiet med ruby/Variabler, datatyper och filer
Heltal eller flyttal (decimaltal)?[redigera]
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[redigera]
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[redigera]
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[redigera]
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 #{}[redigera]
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 \[redigera]
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[redigera]
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[redigera]
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: