next up previous contents index
Next: Kapitel 15: Objekte, Klassen und Methoden Up: Ruby kennen lernen Previous: Codekonventionen   Contents   Index

Ruby-Programme laufen lassen

The only source of knowledge is experience.
-Einstein

\epsfig{height=24pt,file=images/ruby.eps}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.

$3n+1$ ist ein bekanntes Problem in der Zahlentheorie. Man beginnt mit einer positiven ganzen Zahl $n$. Ist sie gerade, wird sie halbiert, anderfalls geht das Spiel mit $3n+1$ weiter. Es wird vermutet, dass man von jeder Zahl aus irgendwann immer auf $1$ 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 $1$ ist. Schließlich probieren wir zaehle noch mit $5$ und $137$ 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:

  1. Über einen expliziten Ruby-Aufruf:
    >ruby dreiN.rb
    5
    90
    
    Das > ist die Eingabeaufforderung an der Konsole und wird nicht mit eingegeben.

  2. Wurde 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.

  3. Auf 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 ruby
    
    Da 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.

  4. Interaktive Ruby-Shell irb: 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].


next up previous contents index
Next: Einführung in Ruby Up: Ruby kennen lernen Previous: Codekonventionen   Contents   Index
Armin Roehrl, Stefan Schmiedl und Clemens Wyss 2002-01-16