Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Operanden
false
-Werte sind, gibt er einen
false
-Wert zurück. Genau wie
&&
ignoriert auch der Operator
||
seinen rechten Operanden, wenn dessen Wert keinen Einfluss auf den Wert der Operation hat. Der Operator
||
funktioniert wie folgt: Zuerst wertet er seinen linken Operanden aus. Wenn dieser einen anderen Wert als
nil
oder
false
hat, gibt er einfach diesen Wert zurück. Andernfalls wertet er seinen rechten Operanden aus und gibt dessen Wert zurück.
    ||
kann als Konjunktion verwendet werden, um mehrere Vergleichs- oder Gleichheitsausdrücke zu verbinden:
x < 0 || y < 0 || z < 0 # Sind irgendwelche dieser Koordinaten negativ?
    In diesem Fall sind die Operanden von
||
echte
true
- oder
false
-Werte, und auch das Ergebnis wird
true
oder
false
sein. Aber
||
ist nicht auf das Arbeiten mit
true
und
false
beschränkt. Eine idiomatische Verwendung von
||
besteht darin, den ersten Nicht-
nil
-Wert aus einer Reihe von Alternativen zurückzugeben:
# Wenn das Argument x nil ist, seinen Wert aus einem Hash mit Benutzer-
# voreinstellungen oder aus einem konstanten Standardwert ermitteln.
x = x || preferences[:x] || Defaults::X
    Beachten Sie, dass
&&
Vorrang vor
||
hat. Betrachten Sie diesen Ausdruck:
1 || 2 && nil # => 1
    Das
&&
wird zuerst ausgeführt, und der Wert dieses Ausdrucks ist 1. Würde das
||
dagegen zuerst ausgeführt, dann wäre der Wert
nil
:
(1 || 2) && nil # => nil
    Der Operator
!
führt ein unäres Boolean-NOT aus. Wenn der Operand
nil
oder
false
ist, liefert der Operator
! true
zurück. Andernfalls gibt
! false
zurück.
    Der Operator
!
hat den höchsten Rang. Das bedeutet, dass Sie zur Errechnung der logischen Umkehrung eines Ausdrucks, der selbst Operatoren verwendet, Klammern benutzen müssen:
!(a && b)
    Übrigens erlaubt eines der Prinzipien der Boolean-Logik, den obigen Ausdruck wie folgt umzuschreiben:
!a || !b
    Die Operatoren
and
,
or
und
not
sind Versionen von
&&
,
||
und
!
mit niedrigerem Rang. Ein möglicher Grund, diese Varianten zu verwenden, besteht einfach darin, dass ihre Namen englisch sind, was Ihren Code leichter lesbar machen kann. Versuchen Sie beispielsweise, diese Codezeile zu lesen:
if x > 0 and y > 0 and not defined? d then d = Math.sqrt(x*x + y*y) end
    Ein weiterer Grund für die Verwendung dieser alternativen Versionen der Boolean-Operatoren ist die Tatsache, dass sie einen niedrigeren Rang haben als der Zuweisungsoperator. Das bedeutet, dass Sie einen Boolean-Ausdruck wie den folgenden schreiben können, der Variablen Werte zuweist, bis er auf einen false-Wert trifft:
if a = f(x) and b = f(y) and c = f(z) then d = g(a,b,c) end
    Dieser Ausdruck würde einfach nicht funktionieren, wenn er mit
&&
statt mit
and
geschrieben würde.
    Sie sollten beachten, dass
and
und
or
denselben Rang haben (und
not
nur einen etwas höheren). Da
and
und
or
denselben Rang haben, während er bei
&&
und
||
verschieden ist, ergeben die folgenden beiden Ausdrücke unterschiedliche Werte:
x || y && nil # && wird zuerst ausgeführt => x
x or y and nil # von links nach rechts ausgewertet => nil
    4.6.9 Bereiche und Flip-Flops: .. und ...
    Sie haben
..
und
...
bereits in „3.5 Bereiche“ gesehen, wo sie als Teil der
Range
-Literalsyntax beschrieben wurden. Wenn Start- und Endpunkt eines Bereichs selbst Integer-Literale sind, wie in
1..10
, dann erzeugt der Ruby-Interpreter beim Parsen ein literales
Range
-Objekt. Sind Startpunkt- und Endpunktausdruck dagegen irgendetwas Komplizierteres als Integer-Literale, wie etwa
x..2*x
, dann ist
Range
-Literal keine passende Bezeichnung dafür. Stattdessen handelt es sich um einen Bereichserzeugungsausdruck. Daraus folgt, dass
..
und
...
eher Operatoren als Bereichsliteralsyntax sind.
    Die Operatoren
..
und
...
sind nicht methodenbasiert und können daher nicht neu definiert werden. Sie haben einen relativ niedrigen Rang, so dass sie in der Regel verwendet werden können, ohne Klammern um den linken oder rechten Operanden zu setzen:
x+1..x*x
    Der Wert dieses Operators ist ein
Range
-Objekt.
x..y
ist dasselbe wie
Range.new(x,y)
    Und
x...y
ist dasselbe wie
Range.new(x,y,true)
    4.6.9.1 Boolean-Flip-Flops
    Wenn die Operatoren
..
und
...
in einer Fallentscheidung wie etwa einer
if
-Anweisung oder in einer Schleife wie etwa einer
while
-Schleife verwendet werden (siehe Kapitel 5 für weitere Informationen über Fallentscheidungen und Schleifen), erzeugen sie keine
Range
-Objekte. Stattdessen erzeugen sie eine spezielle Art von Boolean-Ausdruck, der Flip-Flop genannt wird. Ein

Weitere Kostenlose Bücher