Kirjautuminen

Haku

Tehtävät

Joulukalenteri 2009: Ruby

Kirjoittaja: kayttaja-2791 (04.12.2009)

Yleistä / historiaa

Kehittäjälähtöinen, joustava, ennustettava, aloittelijaystävällinen... Nämä asiat olivat japanilaisen Yukihiro Matsumoton mielessä kun hän alkoi kaavailla uutta, oliopohjaista skriptikieltä vuonna 1993. Ensimmäisestä onnistuneesti ajetusta Ruby-koodista 1994 on alkanut tämän uuden skriptikielen nousu kohti komentosarjakielien kärkikastia.

Ykihiro kirjoitti:

I want to solve problems I meet in the daily life by using computers, so I need to write programs. By using Ruby, I want to concentrate the things I do, not the magical rules of the language, like starting with public void something something something to say, "print hello world." I just want to say, "print this!" I don't want all the surrounding magic keywords.

-Yukihiro Matsumoto, Ruby-ohjelmointikielen luoja

Ruby on noussut hyvin suosituksi eritoten Japanissa, missä kieli on joidenkin arvioiden mukaan jopa suositumpi kuin Python. Lokalisoituminen juuri Japaniin onkin toisaalta haitannut kielen leviämistä muualle, pitkään dokumentaatio oli pelkästään japaniksi ja kehittäjäyhteisö keskittyi vahvasti juuri tälle seudulle. 1998 kuitenkin Rubylle julkaistiin ensimmäinen englanninkielinen sähköpostilista, ja dokumentaatio ja kehittäjäyhteisö muutenkin on laajentunut yhä vahvemmin myös muualle.

Kielen ominaisuuksia

Ruby on hyvin puhdas oliopohjainen kieli. Skriptikielelle tyypillisesti se käyttää muuttujien dynaamista tyypitystä ja muistinkäytöstä huolehtii roskienkeruu. Rubylle on ominaista että halutun toiminnon voi toteuttaa helposti useilla eri tavoilla. Esimerkiksi laskeminen yhdestä kymmeneen:

#TAPA1
10.times do |i|
  print i+1
end

#TAPA2
1.upto(10) { |i| print i }

#TAPA3
(1..10).step(1) { |i| print i }

#TAPA4
Range.new(1, 10).each { |i| print i }

Oliopohjaisuus näkyy helposti, kaikki arvot (mukaanlukien myös true ja false) ovat olioita.

Kielen syntaksi muistuttaa monintavoin pseudo-koodia, ja kielen pääkehittäjä Matsumoto onkin pitänyt yhtenä pääteemanaan kielen tekemistä juuri ihmisiä silmälläpitäen. Tämä näkyy helposti esimerkiksi ylläolevista koodiesimerkeistä, ne eivät paljoa selitystä tarvinne.

Esimerkkiohjelmia

Tulostus:

print "Terve Ohjelmointiputka!"

Fibonacci:

fib = 0
fibNext = 1
iterations = Integer(ARGV[0]) rescue 10

#Iteratiivinen ratkaisu, algoritmisesti hyvä
iterations.times do |x|
  puts fib
  if x + 1 < iterations #Ei lasketa viimeisellä kierroksella enään seuraavaa
    tmp = fibNext
    fibNext = fib + fibNext
    fib = tmp
  else
    puts fibNext
  end
end

#Taulukkoa käyttävä ratkaisu, muistinkäytöllisesti huono
fib = Array[0, 1]
puts fib.join("\n") #Tulostetaan kaksi ensimmäistä
Range.new(0, iterations-2).to_a.each { |x|
  fib[x] = fib[x-1] + fib[x-2]
  puts fib[x]
}

#Rekursiivinen, algoritminen painajainen
def fibonacci(n)
  n < 2 ? return n : return fibonacci(n-1) + fibonacci(n-2)
end

puts fibonacci(iterations)

Lisätietoja

Tietoa sivustosta