Zurück - Dup - Weiter - Inhaltsverzeichnis


Einfache Beispiele


Wir beginnen nun zunächst einmal mit einem Beispiel. Lassen Sie uns zuerst ein allgemein bekanntes Beispiel, die Fakultät-Funktion, betrachten. Die mathematische Definition der Fakultät von n ist:

  n! = 1                (n==0)
     = n * (n-1)!       (andernfalls)

Dies wird in Ruby wie folgt geschrieben:

 def fact(n)
   if n == 0
     1
   else
     n * fact(n-1)
   end
 end

Vielleicht ist Ihnen aufgefallen, daß `end' sehr häufig vorkommt. Jemand sagte, `Algol-like', wenn man es historisch betrachtet. Tatsächlich ist die Syntax von Ruby ähnlich der von Eiffel. Sie haben vielleicht auch das Fehlen von `return' bemerkt. Es funktioniert, da `if' in Ruby einen Wert besitzt. Natürlich ist es erlaubt, `return' hinzuzufügen, jedoch ist es ohne `return' schneller als mit.

Lassen Sie uns das Programm nun benutzen. Fügen sie die folgende Zeile an das Ende des oben gezeigten Programmes und speichern Sie es in eine Datei, sagen wir `fact.rb'.

print fact(ARGV[0].to_i), "\n"

Hier ist `ARGV' ein Array, welches die Kommandozeilenargumente enthält, und `to_i' ist eine Methode zum Umwandeln in Integer.

 % ruby fact.rb 4
 24

Funktioniert es auch mit einem Argument von 40? Dies läßt den Taschenrechner überlaufen...

 % ruby fact.rb 40
 815915283247897734345611269596115894272000000000

Es funktioniert! Tatsächlich kann Ruby mit jeder ganzen Zahl umgehen, die nur durch den Speicher Ihres Computers begrenzt wird. So kann man auch die Fakultät von 400 erhalten.

 % ruby fact.rb 400
 64034522846623895262347970319503005850702583026002959458684
 44594280239716918683143627847864746326467629435057503585681
 08482981628835174352289619886468029979373416541508381624264
 61942352307046244325015114448670890662773914918117331955996
 44070954967134529047702032243491121079759328079510154537266
 72516278778900093497637657103263503315339653498683868313393
 52024373788157786791506311858702618270169819740062983025308
 59129834616227230455833952075961150530223608681043329725519
 48526744322324386699484224042325998055516106359423769613992 
 31917134063858996537970147827206606320217379472010321356624 
 61380907794230459736069956759583609615871512991382228657857 
 95493616176544804532220078258184008484364155912294542753848 
 03558374518022675900061399560145595206127211192918105032491 
 00800000000000000000000000000000000000000000000000000000000 
 0000000000000000000000000000000000000000000

Wir können nicht mit einem Blick die Richtigkeit überprüfen, aber es müßte richtig sein :-)

Wenn Sie Ruby ohne Argument aufrufen, liest Ruby ein Skript von der Standard-Eingabe ein, und führt dieses nach dem Ende der Eingabe aus.

 % ruby
 print "hello world\n"
 print "good-bye world\n"
 ^D
 hello world
 good-bye world

Wie dem auch sei, vielleicht wollen Sie Ruby als Shell benutzen. Wenn Sie folgendes Programm benutzen, können Sie Zeile um Zeile ausführen. Es ist nicht notwendig, daß Sie folgendes Programm verstehen:

 line = ''
 indent=0
 print "ruby> "
 while TRUE
   l = gets
   if not l
     break if line == ''
   else
     line = line + l
     if l =~ /,\s*$/
       print "ruby| "
       next
     end
     if l =~ /^\s*(class|module|def|if|case|while|for|begin)\b[^_]/
       indent += 1
     end
     if l =~ /^\s*end\b[^_]/
       indent -= 1
     end
     if l =~ /\{\s*(\|.*\|)?\s*$/
       indent += 1
     end
     if l =~ /^\s*\}/
       indent -= 1
     end
     if indent > 0
       print "ruby| "
       next
     end
   end
   begin
     print eval(line).inspect, "\n"
   rescue
     $! = 'exception raised' if not $!
     print "ERR: ", $!, "\n"
   end
   break if not l
   line = ''
   print "ruby> "
 end
 print "\n"

Speichern Sie dies in eine Datei `eval.rb' und führen Sie es aus (Es ist auch im Verzeichnis `sample' von Ruby enthalten.)

 % ruby eval.rb
 ruby> print "hello world\n"
 hello world
 nil
 ruby> ^D

`hello world' in der zweiten Zeile ist die Ausgabe von `print' und in der nächsten Zeile `nil' ist der zurückgegebene Wert von `print'. `nil' bedeutet `ungültiger (sinnloser) Wert' und wird verwendet, wenn der Rückgabewert nicht gebraucht wird, wie z.B. bei `print'.

Jedenfalls ist dieses kurze Programm nützlich. Durch diese ganze Einführung hindurch kennzeichnet `ruby> ' die Eingabe für das Programm.
(Es gibt ein Programm `rbc.rb' im Beispiel-Verzeichnis, welches noch nützlicher ist. Bitte probieren Sie es aus.)


Zurück - Dup - Weiter - Inhaltsverzeichnis