Computerwissenschaften

Instanzvariablen in Ruby

Instanzvariablen beginnen mit einem at-Zeichen (@) und können nur innerhalb von Klassenmethoden referenziert werden. Sie unterscheiden sich von lokalen Variablen dadurch, dass sie in keinem bestimmten Bereich existieren. Stattdessen wird für jede Instanz einer Klasse eine ähnliche Variablentabelle gespeichert. Instanzvariablen befinden sich in einer Klasseninstanz. Solange diese Instanz am Leben bleibt, werden dies auch die Instanzvariablen tun.

Instanzvariablen können in jeder Methode dieser Klasse referenziert werden. Alle Methoden einer Klasse verwenden dieselbe Instanzvariablentabelle. im Gegensatz zu lokalen Variablen, bei denen jede Methode eine andere Variablentabelle hat. Es ist jedoch möglich, auf Instanzvariablen zuzugreifen, ohne sie zuvor zu definieren. Dies löst keine Ausnahme aus, aber der Wert der Variablen ist Null und es wird eine Warnung ausgegeben, wenn Sie Ruby mit dem Schalter -w ausführen .

Dieses Beispiel zeigt die Verwendung von Instanzvariablen. Beachten Sie, dass der Shebang den Schalter -w enthält , der Warnungen ausgibt , falls sie auftreten. Beachten Sie auch die falsche Verwendung außerhalb einer Methode im Klassenbereich. Dies ist falsch und wird unten diskutiert.

Warum ist die Variable @test falsch? Dies hat mit dem Umfang und der Art und Weise zu tun, wie Ruby die Dinge implementiert. Innerhalb einer Methode bezieht sich der Bereich der Instanzvariablen auf die bestimmte Instanz dieser Klasse. Im Klassenbereich (innerhalb der Klasse, jedoch außerhalb von Methoden) ist der Bereich jedoch der Klasseninstanzbereich . Ruby implementiert die Klassenhierarchie von Instanziierung der Klasse Objekte, so dass es eine ist zweite Instanz hier im Spiel. Die erste Instanz ist eine Instanz der Class- Klasse, und hier wird @test abgelegt . Die zweite Instanz ist die Instanziierung von TestClass , und hier wird @value abgelegt . Dies wird etwas verwirrend, aber denken Sie daran, @instance_variables niemals außerhalb von Methoden zu verwenden. Wenn Sie klassenweiten Speicher benötigen, verwenden Sie @@ class_variables , der an einer beliebigen Stelle im Klassenbereich (innerhalb oder außerhalb von Methoden) verwendet werden kann und sich gleich verhält.

 

Accessoren

Normalerweise können Sie nicht von außerhalb eines Objekts auf Instanzvariablen zugreifen. Im obigen Beispiel können Sie beispielsweise nicht einfach t.value oder t. @ Value aufrufen, um auf die Instanzvariable @value zuzugreifen . Dies würde die Kapselungsregeln brechen . Dies gilt auch für Instanzen von untergeordneten Klassen. Sie können nicht auf Instanzvariablen zugreifen, die zur übergeordneten Klasse gehören, obwohl sie technisch vom selben Typ sind. Also, um den Zugriff auf Instanzvariablen zur Verfügung zu stellen, ACCESSOR müssen Methoden deklariert werden.

Das folgende Beispiel zeigt, wie Accessor-Methoden geschrieben werden können. Beachten Sie jedoch, dass Ruby eine Verknüpfung bereitstellt und dass dieses Beispiel nur vorhanden ist, um Ihnen die Funktionsweise der Accessor-Methoden zu zeigen. Es ist im Allgemeinen nicht üblich, auf diese Weise geschriebene Accessormethoden zu sehen, es sei denn, für den Accessor ist eine zusätzliche Logik erforderlich.

Die Verknüpfungen machen die Dinge etwas einfacher und kompakter. Es gibt drei dieser Hilfsmethoden. Sie müssen im Klassenbereich ausgeführt werden (innerhalb der Klasse, jedoch außerhalb von Methoden) und definieren dynamisch Methoden, ähnlich wie die im obigen Beispiel definierten Methoden. Hier ist keine Magie im Gange und sie sehen aus wie Sprachschlüsselwörter, aber sie definieren wirklich nur dynamisch Methoden. Außerdem stehen diese Accessoren in der Regel an der Spitze der Klasse. Dies gibt dem Leser einen sofortigen Überblick darüber, welche Mitgliedsvariablen außerhalb der Klasse oder für untergeordnete Klassen verfügbar sind.

Es gibt drei dieser Zugriffsmethoden. Sie enthalten jeweils eine Liste von Symbolen, die die Instanzvariablen beschreiben, auf die zugegriffen werden soll.

  • attr_reader – Definieren Sie „Reader“ -Methoden, wie z. B. die Namensmethode im obigen Beispiel.
  • attr_writer – Definieren Sie „Writer“ -Methoden wie die age = -Methode im obigen Beispiel.
  • attr_accessor – Definieren Sie die Methoden „reader“ und „writer“.

 

Wann werden Instanzvariablen verwendet?

Nachdem Sie nun wissen, was Instanzvariablen sind, wann verwenden Sie sie? Instanzvariablen sollten verwendet werden, wenn sie den Status des Objekts darstellen. Name und Alter eines Schülers, seine Noten usw. Sie sollten nicht zur temporären Speicherung verwendet werden, dafür sind lokale Variablen gedacht. Sie könnten jedoch möglicherweise zur temporären Speicherung zwischen Methodenaufrufen für mehrstufige Berechnungen verwendet werden. Wenn Sie dies jedoch tun, möchten Sie möglicherweise Ihre Methodenzusammensetzung überdenken und diese Variablen stattdessen in Methodenparameter umwandeln.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.