Lite exempelkod i Ruby

RubyHar under en månad lite av och till kodat i Ruby. Tänkte dela med mig av några inledande kodexempel för att komma igång.

För att koda, på en Mac, är Aptana Studio alldeles utmärkt som utvecklingsmiljö. Liknar Eclipse på många sätt. Självklart går det alldeles utmärkt med valfri textredigerare, exempelvis Notepad++ på Windows. Kör du Windows så följer inte Ruby med i installationen, men det går att ladda ner på www.ruby-lang.org

Kodexempel 1 – Hello world

puts "Hello World!"		#skriver ut texten

Kodexempel 2 – iteration

3.times { print "Eee " }	# skriver ut en sträng 3 gånger
print "\n"				# radbryt
1.upto(8) { |x| print x }	# skriver ut 12345678
print "\n"				# radbryt

Kodexempel 3 – array och iteration

a = [ 3, 2, 1 ]			# array
a.each do |elt|			# itererar alla poster av arrayen "a"
	print elt+1			# skriver ut "432"
end					# avslutar iterationen, skulle gått även med {}

Kodexempel 4 – conditional operator

x = 4;
y = 7;

max = x > y ? x : y		# kollar vilken variabel som har störst värde
print max				# skriver ut "max"

Kodexempel 5 – metoder

def square(x)			# definierar metoden "square"
	x*x				# returnerar x i kvadrat
end					# avslutar metoden

print square(5)			# skriver ut resultatet av 10*10 via metoden "square"

Kodexempel 6 – tilldelning

x = 1					# sätter variabeln "x" till "1"
x += 1				# ökar värdet av variabeln "x" med "1", x++ existerar inte
print x				# skriver ut "x"
print "\n"				# radbryt

x -= 1				# minskar värdet av "x" med 1
print x				# skriver ut "x"
print "\n"				# radbryt

x, y = 1, 2				# sätter "x" till 1 och "y" till 2
x, y = y, x				# skiftar värdet mellan variablerna "x" och "y"

Kodexempel 7 – parallel assignment

def minMetod(x,y)		# metod med två variabler som indata
	z = x + 7			# sätter "z" till "x" plus 7
	w = y + 9.34		# sätter "w" till "y" plus 9.34
	[z, w]			# specar värdena som returneras
end					# avslutar metoden

# sätter "val1" och "val2" till det som "minMetod()" returnerar
val1, val2 = minMetod(9, 12)

print val1
print "\n"
print val2
print "\n"

Kodexempel 8 – regular expression

textAttKolla = "ruby"			# sträng att köra reguljärt uttryck på

val = case textAttKolla
	when /[Rr]uby/: "TJO"	# matchar antingen "ruby" eller "Ruby"
	when /simhall/: "TJO 2"
	else nil
	end
	
print val					# skriver ut "val"
print "\n"

Kodexempel 9 – schemaläggning och timer

t = Thread.new do			# skapar en ny tråd
  while true do         			# loopar
    p 'perform task'    			# skriver ut meddelande
    sleep 25            			# säger åt tråden att vila i 25 sekunder
  end
end
 
t.join 					# väntar på att tråden ska stanna, vilket den inte gör i detta kodexempel

Kodexempel 10 – JSON

require 'rubygems'
require 'json'
require 'net/http'

def api_search(url)
   resp = Net::HTTP.get_response(URI.parse(url))
   data = resp.body
   
   print url
   print "\n"

   # konverterar den returnerade JSON till Ruby
   # datastruktur blir en hash
   result = JSON.parse(data)

   # om 'Error' ingår i resultatet kastas ett fel
   if result.has_key? 'Error'
      raise "web service error"
   end
   return result
end

res = api_search('http://gray.orebro.se/epospunktinfo/GetLayers.aspx?layerId=2&format=json')

res.each do|name,val|
  puts "#{name}: #{val}"
  
  val.each do|name2,val2|
    puts "#{name2}: #{val2}"
  end
end

Kodexempel 11 – kommentarer och dokumentation

# hela denna raden är en kommentar

k = "# här blir det en sträng"    # och här kommer kommentaren
r = /#reguljärt uttryck/          # och en kommentar

# flera
# rader 
# med 
# kommentarer

=begin
  Allt mellan dessa uttryck är inbäddad dokumentation.
  Användbart bland annat när man vill kommentera bort 
  hela stycken med kod eller bädda in exempelkod från 
  annat språk.
=end

# Rdoc är kommentarer som kan hämtas ut som dokumentation
# och kan visas med "ri", inte helt olikt wiki-kodning
# 
# = huvudrubrik
# == underrubrik
# här kommer lite innehåll om "underrubrik"
# = ny huvudrubrik

p k                               # skriver ut variabeln "k"

Det kommer säkert mer exempel allt eftersom jag kodar vidare 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *