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.
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.
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.
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)