Ruby
1. Beschreibung
Ruby ist eine relativ moderne Scriptsprache. Sie ist relativ leicht zu erlernen, die Syntax ist unter anderem von Perl und
Python abgeleitet. Die wichtigsten Merkmale sind:
Ruby ...
-
... ist komplett objekt-orientiert, alles ist ein Objekt in Ruby. Beispiel: Die Zahl
1 ist in Ruby ein Objekt
vom Typ Fixnum:
1.type # => Fixnum
1.succ # => 2
1.to_f # => 1.0
-
... ist eine Scriptsprache und kennt daher viele String-Funktionen, Reguläre Ausdrücke, ...
-
... kann Blöcke an Methoden übergeben. Blöcke sind mehrere Anweisungen, die von geschweiften
Klammern
{...} oder do...end zusammengefasst werden. Wenn ein Block
an ein Funktion übergeben wird, kann diese den Block mit mehreren Argumenten ausführen. Beispiel:
1 def finde(array)
2 for element in array
3 # per yield wird der block ausgeführt.
4 if yield element
5 puts "Element gefunden: " + element.to_s
6 end
7 end
8 end
9
10 zahlen = [2, 5, 9, 12, 45] # In diesem Array wird gesucht
11
12 finde(zahlen) { |zahl|
13 return zahl / 5 == 9 # Wenn die Zahl geteilt durch 9 gleich 5 ergibt
14 }
Natürlich gibt dieses Script Element gefunden: 45 aus. Eine kleine Erklärung: An die Funktion
finde(array) wird in Zeile 12 das Array aus Zahlen und der nachfolgende Block (12 - 14)
übergeben. In der Funktion wird jetzt nacheinander für jedes Element des Arrays dieser Block mit dem
Argument ausgeführt. Innerhalb des Blocks wird die Argumentliste |zahl| der Wert zugewiesen, jetzt
kann man mit jedem Element des Arrays arbeiten. Der Block prüft nun, ob zahl / 5 gleich 9
ist, und gibt dann entweder true oder false an die Funktion finde zurück.
-
... ist dynamisch typisiert. Das heisst, es werden keine strengen Unterscheidungen zwischen Typen wie z.B. bei
C++ vorgenommen. Beispiel:
x = 7
x.type # => Fixnum
x.to_f.type # => Float
x.to_s.type # => String
-
... braucht keine Variablen-Deklarationen. Variablen werden beim ersten Gebrauch erstellt. Es wird unterschieden
zwischen lokalen Variablen (z.B.
zahl), Instanz-Variablen (z.B. @zahl), Klassen-Variablen
(@@zahl) und globalen Variablen ($zahl). Aus diesem Grund entfällt auch das self
oder $this, dass man von anderen Programmiersprachen kennt.
-
... erlaubt es zur Laufzeit Methoden zu Klassen und sogar Instanzen hinzuzufügen:
# Da Ruby nur Float#round besitzt, ich aber
# auf 2 Dezimalstellen runden muss füge ich
# der Klasse Float die Methode round_to hinzu.
class Float
def round_to(i)
f = (10 ** i).to_f
nr = self * f
return nr.round / f
end
end
Math::PI.round_to(2) # 3.14
-
... hat eine Ausnahmebehandlung, wie zum Beispiel Java:
zahl = gets.to_i
begin
puts "10 / " + zahl.to_s + " = " + (100 / zahl).to_s
rescue ZeroDivisionError
puts "Teilen durch 0 nicht erlaubt!"
end
-
... hat einen Garbage Collector, der nicht mehr gebrauchte Variablen löscht.
-
... kann noch vieles mehr ...
2. Beispiele
Eine kleine Sammlung von interessanten Beispielen:
2.1. Mehr zu Blöcken
Eine häufige Anwendung von Blöcken ist das iterieren über Arrays, Sequenzen, Hashes usw.
# Gibt das Quadrat von 1, 7 und 19 aus.
[1, 7, 19].each { |x| puts x ** 2 }
# Gibt die Quersummen der Zahlen 1 bis 100 aus
(1..100).each { |x|
sum = 0
x.to_s.scan(/./) { |c|
sum += c.to_i
}
puts sum
}
# Was wir schon immer wissen wollten:
# Wieviele y's haben die folgenden Wörter?
%w{ Ruby C++ Python Perl }.each { |w| puts w.count "y" }
#AaBbCcDdEe..YyZz:
'a'.upto('z') { |c| print c.upcase, c }
2.2. Arrays und Hashes
Zu einer Scriptsprache gehören natürlich auch dynamische Arrays und Hashes:
def analyze(str)
anzahl = {} # Ein Hash
str.scan(/./) { |c|
next if c !~ /[A-Za-z]/
anzahl[c] = 0 if anzahl[c].nil?
anzahl[c] += 1
}
puts "Der String enthält"
anzahl.each { |c, anzahl|
puts " -> " + anzahl.to_s + " " + c + ((anzahl > 1) ? "'s" : "")
}
end
analyze "Hello World"
3. Mehr Informationen zu Ruby
© 2004 by David Peter
|