Die Programmiersprache Ruby (German Edition)
Namen teilen. In statisch typisierten Sprachen können Methoden durch Anzahl und Typ ihrer Argumente unterschieden werden, und zwei oder mehr Methoden können sich denselben Namen teilen, solange sie eine verschiedene Anzahl oder verschiedene Typen von Argumenten erwarten. Diese Art des Überladens ist in Ruby nicht möglich.
Andererseits ist das Überladen von Methoden in Ruby nicht nötig. Methoden können Argumente jeder beliebigen Klasse akzeptieren und so geschrieben werden, dass sie je nach Typ der übergebenen Argumente unterschiedliche Dinge tun. Außerdem können Rubys Methodenargumente (wie wir weiter unten sehen werden) mit Standardwerten deklariert werden, und diese Argumente können in Methodenaufrufen weggelassen werden. Dies erlaubt den Aufruf einer einzelnen Methode mit unterschiedlicher Anzahl von Argumenten.
----
Ein praktischerer Grund für den Einsatz von Methoden-Aliasen ist das Einfügen neuer Funktionalität in eine Methode. Das Folgende ist ein gängiges Idiom zur Erweiterung existierender Methoden:
def hello # Eine nette, einfache Methode
puts "Hallo Welt" # Angenommen, wir wollen sie erweitern ...
end
alias original_hello hello # Der Methode einen Backup-Namen geben
def hello # Neue Methode mit dem alten Namen definieren
puts "Aufmerksamkeit, bitte" # Das hier tut etwas Neues.
original_hello # Dann die Originalmethode aufrufen
puts "This has been a test" # Dann tut auch das hier etwas Neues.
end
In diesem Code arbeiten wir mit globalen Methoden. Es kommt häufiger vor, dass
alias
mit den Instanzmethoden einer Klasse verwendet wird. (Die lernen wir in Kapitel 7 kennen.) In dieser Situation muss
alias
innerhalb der Klasse verwendet werden, deren Methode umbenannt wird. Klassen können in Ruby »wiedereröffnet« werden (auch das wird in Kapitel 7 besprochen) – das heißt, dass Ihr Code eine bestehende Klasse mit einer
class
-Anweisung »öffnen« und dann, wie in dem Beispiel gezeigt,
alias
verwenden kann, um die bestehenden Methoden dieser Klasse zu erweitern oder zu ändern. Das wird als »Alias-Verkettung« bezeichnet und detailliert in „8.11 Alias-Verkettung“ behandelt.
6.3 Methoden und Klammern
Ruby erlaubt das Weglassen von Klammern in den meisten Methodenaufrufen. In einfachen Fällen führt dies zu sauber aussehendem Code. In komplexeren Fällen führt es jedoch zu Syntaxzweideutigkeiten und verwirrenden Zweifelsfällen. Die untersuchen wir in den kommenden Abschnitten.
6.3.1 Optionale Klammern
Klammern in Methodenaufrufen werden in vielen gängigen Ruby-Idiomen weggelassen. Die folgenden beiden Codezeilen sind beispielsweise äquivalent:
puts "Hallo Welt"
puts("Hallo Welt")
In der ersten Zeile sieht
puts
so aus wie ein in die Sprache eingebautes Schlüsselwort, eine Anweisung oder ein Kommando. Die gleichbedeutende zweite Zeile zeigt, dass es sich einfach um den Aufruf einer globalen Methode mit weggelassenen Klammern handelt. Die zweite Form ist zwar klarer, aber die erste ist kürzer, wird häufiger eingesetzt und erscheint – aber darüber könnte man streiten – natürlicher.
Betrachten Sie als Nächstes diesen Code:
greeting = "Hallo"
size = greeting.length
Wenn Sie mit anderen objektorientierten Sprachen vertraut sind, könnten Sie denken, dass
length
eine Eigenschaft, ein Feld oder eine Variable von String-Objekten sei. Ruby ist jedoch stark objektorientiert, und seine Objekte sind voll gekapselt; die einzige Möglichkeit, mit ihnen zu interagieren, besteht darin, ihre Methoden aufzurufen. In diesem Code ist
greeting.length
ein Methodenaufruf. Die Methode
length
erwartet keine Argumente und wird ohne Klammern aufgerufen. Der folgende Code ist äquivalent:
size = greeting.length()
Das Einfügen der optionalen Klammern betont die Tatsache, dass ein Methodenaufruf stattfindet. Das Weglassen der Klammern in Methodenaufrufen ohne Argumente erzeugt die Illusion des Eigenschaftenzugriffs und ist eine weit verbreitete Praxis.
Klammern werden sehr häufig weggelassen, wenn die aufgerufene Methode kein oder nur ein Argument hat. Es kommt zwar seltener vor, aber die Klammern können selbst dann weggelassen werden, wenn es mehrere Argumente gibt, wie im folgenden Code:
x = 3 # x ist eine Zahl.
x.between? 1,5 # Dasselbe wie x.between?(1,5)
Die Klammern können auch um die Parameterliste in Methodendefinitionen weggelassen werden, wenngleich es kaum Argumente dafür gibt, dass das Ihren Code klarer oder lesbarer macht. Der folgende Code definiert beispielsweise eine
Weitere Kostenlose Bücher