Die Programmiersprache Ruby (German Edition)
dem Muster nicht entspricht. Wenn der String dem Muster dagegen entspricht, geben diese Operatoren den Integer-Index zurück, bei dem der Treffer beginnt. (Beachten Sie, dass
nil
in Boolean-Ausdrücken wie
false
funktioniert, während jeder Integer wie
true
funktioniert.)
Der Operator
!~
ist die Umkehrung von
=~
: Er ruft
=~
auf und liefert
true
zurück, wenn
=~ nil
zurückgegeben hat, oder
false
, wenn
=~
einen Integer zurückgegeben hat. Sie können
!~
in Ruby 1.9 neu definieren, aber nicht in Ruby 1.8.
Der Operator
===
ist der Case-Gleichheitsoperator. Er wird implizit von
case
-Anweisungen verwendet (siehe Kapitel 5 ). Explizit wird er erheblich seltener eingesetzt als
==
.
Range
,
Class
und
Regexp
definieren diesen Operator als eine Art Element- oder Mustervergleichsoperator. Andere Klassen erben die Definition von
Object
, die einfach den Operator
==
aufruft (siehe „3.8.5 Objektgleichheit“ ). Beachten Sie, dass es keinen
!==
-Operator gibt; wenn Sie
===
umkehren möchten, müssen Sie es selbst tun.
4.6.8 Boolean-Operatoren: &&, ||, !, and, or, not
Rubys Boolean-Operatoren sind in die Sprache eingebaut und basieren nicht auf Methoden: Klassen können beispielsweise keine eigene
&&
-Methode definieren. Der Grund dafür ist, dass Boolean-Operatoren auf jeden beliebigen Wert angewendet werden können und sich für jede Art von Operanden konsistent verhalten müssen. Ruby definiert die speziellen Werte
true
und
false
, besitzt aber keinen Boolean-Typ. Für alle Boolean-Operatoren gelten die Werte
false
und
nil
als falsch. Und jeder andere Wert, einschließlich
true
,
0
,
NaN
,
""
,
[]
und
{}
, gilt als wahr. Beachten Sie, dass
!
eine Ausnahme ist; diesen Operator können Sie in Ruby 1.9 (aber nicht in Ruby 1.8) neu definieren. Beachten Sie auch, dass Sie Methoden namens
and
,
or
und
not
definieren können, aber das sind gewöhnliche Methoden, die das Verhalten der gleichnamigen Operatoren nicht verändern.
Ein weiter Grund dafür, dass Rubys Boolean-Operatoren ein Kernbestandteil der Sprache und keine definierbaren Methoden sind, besteht darin, dass die binären Operatoren das »Short Circuit«-Verfahren (»Kurzschlussverfahren«) einsetzen. Wenn der Wert der Operation bereits eindeutig durch den linken Operanden bestimmt wird, dann wird der rechte Operand ignoriert und noch nicht einmal ausgewertet. Wenn der rechte Operand ein Ausdruck mit Nebenwirkungen ist (etwa eine Wertzuweisung oder der Aufruf einer Methode mit Nebenwirkungen), dann tritt diese Nebenwirkung je nach Wert des linken Operanden möglicherweise nicht auf.
&&
ist ein Boolean-AND-Operator. Er gibt einen true-Wert zurück, wenn sowohl sein linker als auch sein rechter Operand true-Werte sind. Andernfalls gibt er einen false-Wert zurück. Beachten Sie, dass in dieser Beschreibung »ein true-Wert« und »ein false-Wert« steht und nicht »der Wert
true
« beziehungsweise »der Wert
false
«.
&&
wird oft zusammen mit Vergleichsoperatoren wie
==
und
<
in Ausdrücken wie diesem verwendet:
x == 0 && y > 1
Die Vergleichs- und Gleichheitsoperatoren ergeben tatsächlich
true
oder
false
, und in diesem Fall arbeitet der Operator
&&
mit echten Boolean-Werten. Aber das ist nicht immer der Fall. Der Operator kann auch so verwendet werden:
x && y
In diesem Fall können
x
und
y
alles Mögliche sein. Der Wert des Ausdrucks ist entweder der Wert von
x
oder der Wert von
y
. Wenn sowohl
x
als auch
y
true-Werte sind, ist der Wert des Ausdrucks der Wert von
y
. Wenn
x
ein false-Wert ist, ist der Wert des Ausdrucks
x
. Andernfalls muss
y
ein false-Wert sein, und der Wert des Ausdrucks ist
y
.
In Wirklichkeit funktioniert der Operator
&&
wie folgt: Zuerst wertet er seinen linken Operanden aus. Wenn dieser Operand
nil
oder
false
ist, gibt er diesen Wert zurück und lässt den rechten Operanden ganz weg. Andernfalls ist der linke Operand ein true-Wert, und der Gesamtwert des
&&
-Operators hängt vom Wert des rechten Operanden ab. In diesem Fall wertet der Operator seinen rechten Operanden aus und gibt dessen Wert zurück.
Die Tatsache, dass
&&
seinen rechten Operanden auslassen kann, können Sie in Ihrem Code als Vorteil nutzen. Betrachten Sie diesen Ausdruck:
x && print(x.to_s)
Dieser Code gibt den Wert von
x
als String aus, aber nur, wenn
x
nicht
nil
oder
false
ist. [ 15 ]
Der Operator
||
gibt den Boolean-OR-Wert seiner Operanden zurück. Er gibt einen
true
-Wert zurück, wenn mindestens einer seiner Operanden ein
true
-Wert ist. Wenn beide
Weitere Kostenlose Bücher