next up previous contents index
Search Next: Zuweisungen Up: Operatoren Previous: Operatoren   Contents   Index

Operatoren

Wer schon einmal in C oder Java programmiert hat, dürfte mit den meisten Ruby-Operatoren keine Probleme haben. In der Übersichtstabelle 7.1 werden die stärker bindenden Operatoren weiter oben aufgeführt.


Table: Stärker bindende Operatoren stehen weiter oben

Die logischen Verknüpfungen (and und && sowie or und ||) werten in beiden Formen so wenig Argumente wie möglich aus. Ergibt bei der Konjunktion mit and oder && der erste Ausdruck schon false, so ist das Resultat unabhängig vom zweiten Ausdruck false und die Auswertung des zweiten Ausdrucks unterbleibt.


\epsfig{height=36pt,file=images/chan.eps}Neben den unterschiedlichen Vorrangstufen von && und and, || und or sowie ! und not gibt es noch einen weiteren Unterschied zwischen den beiden Formen: Die symbolischen Ausdrücke können in Argumenten anderer Methoden verwendet werden, während die verbalen Formen dort einen SyntaxError erzeugen. \epsfig{height=10pt,file=images/ruby.eps}

In logischen Ausdrücken[*]gelten nil und false beide als nicht wahr. Abgesehen davon, dass man nil in die ganze Zahl 0 umwandeln kann, bieten beide die gleichen Methoden.

nil.methods - false.methods   #-> ["to_i"]
nil.to_i                      #-> 0
false.methods - nil.methods   #-> []

Der wesentliche Unterschied liegt in ihrer inhaltlichen Bedeutung: Prädikate, die auf ? enden, sollten true oder false zurückgeben, andere Methoden entweder einen "`richtigen"' Wert oder nil. nil gilt als "`unbestimmt"', während false wirklich "`falsch"' meint.

Die aus der Sprache C bekannten inkrementellen Zuweisungen kombinieren die angezeigte Rechenoperation mit der Wertzuweisung:

a = 3
a += 4   #-> 7
a        #-> 7

Der ?:-Operator wurde ebenfalls aus C übernommen, hat aber in Ruby im Vergleich zum "`normalen"' if keine Sonderfunktion. Er wird eingesetzt, wenn die Rückgabewerte "`kurz"' sind, also in eine Zeile passen. Bei "`längeren"' Angaben wird er leicht übersehen.

a = rand(2)
print a == 1 ? "Kopf" : "Zahl"
print(if a == 1 then "Kopf"
  else "Zahl"; end)



Footnotes

... Ausdrücken[*]
nil und false

next up previous contents index
Search Next: Zuweisungen Up: Operatoren Previous: Operatoren   Contents   Index
(C) 2002 by dpunkt.de, Armin Roehrl, Stefan Schmiedl, Clemens Wyss 2002-01-20