Die beste Art, eine Programmiersprache zu lernen,
ist, damit zu spielen und eigene Ideen auszuprobieren.
Ruby bietet hierfür verschiedene Möglichkeiten, die
wir in diesem Kapitel aufzeigen.
Die einfachen Installationsprozeduren sind in Anhang
E beschrieben.
![]()
ist ein bekanntes Problem in der Zahlentheorie.
Man beginnt mit einer positiven ganzen Zahl
.
Ist sie gerade, wird sie halbiert, anderfalls geht das
Spiel mit
weiter.
Es wird vermutet, dass man von jeder Zahl aus
irgendwann immer auf
kommt.
Beginnt man zum Beispiel mit 3, so ist man nach sieben Schritten
bei der 1 angekommen: 3->10->5->16->8->4->2->1.
Erstellen wir nun mit einem Texteditor
die Datei dreiN.rb. Ruby-Dateien enden normalerweise mit .rb.
def naechsteZahl(n)
if n % 2 == 0 then n / 2
else 3 * n + 1
end
end
def zaehle(n)
its = 0
while n != 1
n = naechsteZahl(n)
its += 1
end
its
end
p zaehle(5) #-> 5
p zaehle(137) #-> 90
Wir haben mit def die beiden Funktionen
naechsteZahl und zaehle definiert.
zaehle stellt fest, wie oft naechsteZahl aufgerufen werden
muss, bis das Resultat
ist.
Schließlich probieren wir zaehle noch mit
und
aus.
Mit #-> folgen wir der für Ruby üblichen Konvention,
Ergebnisse als Kommentar anzuzeigen. Der Ruby-Interpreter ignoriert die dem
# folgenden Zeichen bis zum Zeilenende. Längere Kommentare können
mit =begin und =end eingeschlossen werden.
Um ein Ruby-Skript ablaufen zu lassen, gibt es verschiedene Möglichkeiten:
einen expliziten Ruby-Aufruf:
>ruby dreiN.rb 5 90Das
> ist die Eingabeaufforderung an der Konsole
und wird nicht mit eingegeben.
Ruby auf einem Windows-System mit dem Installer-Paket
[WinRuby] eingerichtet, so
existiert meistens auch eine Verknüpfung, so dass die Eingabe von
dreiN.rb an der Konsole bzw. ein Doppelklick auf das Datei-Icon
im Explorer ausreicht.
Unix-Systemen gibt es die Möglichkeit,
in der ersten Zeile einer Datei den zuständigen
Interpreter zu benennen:
#!/usr/local/bin/ruby
oder auch
#!/usr/bin/env rubyDa Ruby gelegentlich auch unter /usr/bin/ruby zu finden ist, ist die zweite Methode etwas portabler. Wird die Datei noch mit
chmod +x dreiN.rb ausführbar
gemacht, reicht hier ebenfalls die Angabe des Skriptnamens
zur Ausführung.
Die Ruby-Shell ermöglicht es, Ruby-Befehle einzugeben und
ihre Auswirkungen direkt zu sehen. Die Zeilen können auch
nachträglich editiert werden, da es einen
History-Mechanismus gibt. Wenn die Konsole Copy und
Paste unterstützt, kann man so sehr schnell Ideen testen.
Für größere händische Eingaben ist die Shell allerdings
nicht zu empfehlen, da es zurzeit nicht möglich ist,
den eingegebenen Code in eine Datei zu schreiben.
Besonders praktisch ist, dass irb die Ergebnisse der einzelnen ausgewerteten Ausdrücke anzeigt (ähnlich einem Lisp-Listener), auch wenn kein expliziter Ausgabebefehl angegeben ist. Damit kann irb in einfachen Fällen als bequemer Debugger eingesetzt werden.
> irb irb(main):001:0> def naechsteZahl(n) irb(main):002:1> if n % 2 == 0 then irb(main):003:2* n / 2 irb(main):004:2> else irb(main):005:2* 3 * n + 1 irb(main):006:2> end irb(main):007:1> end nil # Rückgabewert von def irb(main):008:0> irb(main):009:0* def zaehle(n) irb(main):010:1> its = 0 irb(main):011:1> while n != 1 irb(main):012:2> n = naechsteZahl(n) irb(main):013:2> its += 1 irb(main):014:2> end irb(main):015:1> its irb(main):016:1> end nil # Rückgabewert von def irb(main):017:0> irb(main):018:0* p zaehle(5) 5 # Ausgabe nil # Rückgabewert von p irb(main):019:0> zaehle(137) 90 # Rückgabewert von zaehle irb(main):020:0>
Eine ausführliche Beschreibung der Möglichkeiten von irb findet man im Appendix B von [ThHu01] oder online unter [PickAxe].