Die Programmiersprache Ruby (German Edition)
den Methodenaufruf gestellte Frage beantwortet. Die Methode
empty?
eines Array gibt beispielsweise
true
zurück, wenn das Array keine Elemente besitzt. Methoden wie diese heißen Prädikate . Prädikate geben üblicherweise einen der Boolean-Werte
true
oder
false
zurück, aber das ist nicht notwendig, weil jeder Wert außer
false
und
nil
wie
true
funktioniert, wenn ein Boolean-Wert benötigt wird. (Die
Numeric
-Methode
nonzero?
liefert beispielsweise
nil
zurück, wenn die Zahl, für die sie aufgerufen wird, Null ist, und gibt andernfalls einfach die Zahl zurück.)
Die zweite Konvention ist, dass Methoden, deren Namen mit einem Ausrufezeichen enden, mit Vorsicht eingesetzt werden sollten. Das Array-Objekt besitzt beispielsweise eine Methode
sort
, die eine Kopie des Array anfertigt und diese dann sortiert. Daneben gibt es eine Methode
sort!
, die das Array an Ort und Stelle sortiert. Das Ausrufezeichen zeigt an, dass Sie vorsichtiger sein müssen, wenn Sie diese Version der Methode verwenden.
Methoden, die mit einem Ausrufezeichen enden, sind oft Mutatoren , die den internen Zustand eines Objekts modifizieren. Aber das ist nicht immer der Fall; es gibt viele Mutatoren, die nicht mit einem Ausrufezeichen enden, und eine Anzahl von Nichtmutatoren, die es sehr wohl tun. Mutatormethoden (wie etwa
Array.fill
), die keine nichtmutierende Variante besitzen, enden üblicherweise nicht mit einem Ausrufezeichen.
Betrachten Sie die globale Funktion
exit
: Sie beendet die Ausführung des Ruby-Programms auf kontrollierte Weise. Es gibt auch eine Variante namens
exit!
, die das Programm sofort abbricht, ohne
END
-Blöcke oder mit
at_exit
registrierte Shutdown-Hooks auszuführen.
exit!
ist kein Mutator; es ist die »gefährliche« Variante der Methode
exit
, die mit einem
!
gekennzeichnet wird, um einen Programmierer, der sie verwendet, daran zu erinnern, dass er vorsichtig sein soll.
6.2.1 Operatormethoden
Viele Ruby-Operatoren, etwa
+
,
*
und sogar der Array-Indexoperator
[]
, sind als Methoden implementiert, die Sie in Ihren eigenen Klassen definieren können. Sie definieren einen Operator, indem Sie eine Methode mit demselben »Namen« wie demjenigen des Operators definieren. (Die einzigen Ausnahmen sind die unären Plus- und Minusoperatoren, die die Methodennamen
+@
und
-@
verwenden.) Ruby erlaubt Ihnen, das zu tun, obwohl der Methodenname ausschließlich aus Satzzeichen besteht. Daraus könnte eine Methodendefinition wie diese entstehen:
def +(other) # Binären Plusoperator definieren: x+y ist x.+(y)
self.concatenate(other)
end
Tabelle 4.2 in Kapitel 4 gibt an, welche Ruby-Operatoren als Methoden definiert sind. Diese Operatoren sind die einzigen satzzeichenbasierten Methodennamen, die Sie verwenden können. Sie können keine neuen Operatoren erfinden oder Methoden definieren, die auf anderen Abfolgen von Satzzeichen basieren. In „7.1.6 Definieren von Operatoren“ gibt es zusätzliche Beispiele zur Definition methodenbasierter Operatoren.
Methoden, die einen unären Operator definieren, erhalten keine Argumente. Methoden, die binäre Operatoren definieren, erhalten ein Argument und sollten mit
self
und dem Argument arbeiten. Die Array-Zugriffsoperatoren
[]
und
[]=
sind etwas Besonderes, weil sie mit einer beliebigen Anzahl von Argumenten aufgerufen werden können. Bei
[]=
ist das letzte Argument stets der zugewiesene Wert.
6.2.2 Methoden-Aliase
Es ist nichts Ungewöhnliches, wenn Methoden in Ruby mehr als einen Namen besitzen. Die Sprache hat ein Schlüsselwort
alias
, das die Aufgabe hat, einen neuen Namen für eine existierende Methode zu definieren. Verwenden Sie es wie folgt:
alias aka also_known_as # alias neuer_name bestehender_name
Nach der Ausführung dieser Anweisung verweist der Bezeichner
aka
auf dieselbe Methode wie
also_known_as
.
Methoden-Aliase gehören zu den Eigenschaften, die Ruby zu einer ausdrucksstarken und natürlichen Sprache machen. Wenn es mehrere Namen für eine Methode gibt, können Sie denjenigen wählen, der in Ihrem Code am natürlichsten erscheint. Die Klasse
Range
definiert beispielsweise eine Methode zur Überprüfung, ob ein Wert innerhalb des Bereichs liegt. Sie können diese Methode mit dem Namen
include?
oder mit dem Namen
member?
aufrufen. Wenn Sie einen Bereich als eine Art Menge behandeln, könnte der Name
member?
die natürlichste Wahl sein.
----
Aliase sind kein Überschreiben
Eine Ruby-Methode kann zwei Namen haben, aber zwei Methoden können sich nicht denselben
Weitere Kostenlose Bücher