Die Programmiersprache Ruby (German Edition)
+
1
R
J
Boolean-NOT, Bit-Komplement, unäres Plus [ a ]
**
2
R
J
Potenz
-
1
R
J
Unäres Minus (Definition als
-@
)
* / %
2
L
J
Multiplikation, Division, Modulo (Rest)
+ -
2
L
J
Addition (oder Verkettung), Subtraktion
<< >>
2
L
J
Bitweise Linksverschiebung (oder Anhängen), bitweise Rechtsverschiebung
&
2
L
J
Bitweises AND
| ^
2
L
J
Bitweises OR, bitweises XOR
< <= >= >
2
L
J
Reihenfolge
== === != =~ !~ <=>
2
N
J
Gleichheit, Mustervergleich, Vergleich [ b ]
&&
2
L
N
Boolean-AND
||
2
L
N
Boolean-OR
.. ...
2
N
N
Bereichserzeugung und Boolean-Flip-Flops
?:
3
R
N
Bedingung
rescue
2
L
N
Ausnahmebehandlungsmodifizierer
=
**= *= /= %= += -=
<<= >>=
&&= &= ||= |= ^=
2
R
N
Wertzuweisung
defined?
1
N
N
Variablendefinition und -typ überprüfen
not
1
R
N
Boolean-NOT (niedriger Rang)
and or
2
L
N
Boolean-AND, Boolean-OR (niedriger Rang)
if unless while until
2
N
N
Bedingungs- und Schleifenmodifizierer
[ a ]
!
kann vor Ruby 1.9 nicht neu definiert werden. Definieren Sie unäres Plus mit
+@
.
[ b ]
!=
und
!~
können vor Ruby 1.9 nicht neu definiert werden.
Ruby implementiert eine Auswahl seiner Operatoren als Methoden, was Klassen erlaubt, neue Bedeutungen für diese Operatoren zu definieren. Die Spalte M von Tabelle 4.2 gibt an, welche Operatoren Methoden sind. Mit »J« gekennzeichnete Operatoren sind als Methoden implementiert und können neu definiert werden, mit »N« gekennzeichnete Operatoren dagegen nicht. Im Allgemeinen können Klassen ihre eigenen Arithmetik-, Reihenfolgen- und Gleichheitsoperatoren definieren, aber sie können nicht die diversen Boolean-Operatoren neu definieren. Wir kategorisieren Operatoren in diesem Kapitel gemäß ihrem gängigsten Verwendungszweck für die Ruby-Standardklassen. Andere Klassen können unterschiedliche Bedeutungen für diese Operatoren definieren. Der Operator
+
führt beispielsweise numerische Addition durch und wird als arithmetischer Operator kategorisiert. Aber er wird auch zum Verketten von Strings und Arrays verwendet. Ein methodenbasierter Operator wird als Methode seines linken Operanden (beziehungsweise seines einzigen Operanden im Fall unärer Operatoren) aufgerufen. Der rechte Operand wird der Methode als Argument übergeben. Sie können in der Definition einer Klasse jeden beliebigen methodenbasierten Operator nachschlagen, genau wie jede andere Methode einer Klasse. Verwenden Sie beispielsweise ri , um die Definition des Operators
*
für Strings nachzuschlagen:
ri 'String.*'
Wenn Sie die unären Operatoren
+
und
-
definieren möchten, verwenden Sie die Methodennamen
+@
beziehungsweise
-@
, um eine Verwechslung mit den binären Operatoren auszuschließen, die dieselben Symbole verwenden. Die Operatoren
!=
und
!~
sind als Verneinung der Operatoren
==
und
=~
definiert. In Ruby 1.9 können Sie
!=
und
!~
neu definieren. In früheren Versionen der Sprache ist das nicht möglich. Ruby 1.9 erlaubt außerdem die Neudefinition des unären Operators
!
.
4.6.1 Unäres + und -
Der unäre Minusoperator ändert das Vorzeichen seines numerischen Arguments. Das unäre Plus ist erlaubt, hat jedoch keine Wirkung auf numerische Operanden – es liefert einfach den Wert seines Operanden zurück. Es wird aus Gründen der Symmetrie mit dem unären Minus bereitgestellt und kann natürlich neu definiert werden. Beachten Sie, dass das unäre Minus einen etwas niedrigeren Rang hat als das unäre Plus.
Die Namen dieser unären Operatoren als Methoden sind
-@
und
+@
. Verwenden Sie diese Namen, wenn Sie die Operatoren neu definieren, als Methoden definieren oder ihre Dokumentation nachschlagen. Diese speziellen Namen sind notwendig, um das unäre Plus und Minus vom binären Plus beziehungsweise Minus zu unterscheiden.
4.6.2 Potenz: **
**
führt die Potenzoperation durch, wobei das erste Argument zur Potenz des zweiten erhoben wird. Beachten Sie, dass Sie Wurzeln berechnen können, indem Sie eine Bruchzahl als zweiten Operanden verwenden. Beispielsweise ist
x**(1.0/3.0)
die Kubikwurzel von
x
. Entsprechend ist
x**-y
dasselbe wie
1/(x**y)
. Der Operator
**
ist rechtsassoziativ, so dass
x**y**z
dasselbe ist wie
x**(y**z)
. Beachten Sie schließlich, dass
**
einen höheren Rang hat als der unäre Minusoperator, also ist
−1**0.5
dasselbe wie
-(1**0.5)
. Wenn Sie wirklich die Quadratwurzel aus
−1
ziehen möchten, müssen Sie Klammern verwenden:
(-1)**0.5
. (Das imaginäre Ergebnis ist keine Zahl oder not-a-number, und der Ausdruck ergibt
NaN
.)
4.6.3 Arithmetik: +, −, *, / und %
Die
Weitere Kostenlose Bücher