Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was sind attr_accessor, attr_reader und attr_writer in Ruby? Wozu werden sie benötigt?

Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby ist attr_accessor ein Makro (oder eine Methode) zur automatischen Erstellung eines Getters (Zugriffsmethode auf den Wert) und eines Setters (Methode zum Setzen des Wertes) für Instanzvariablen (instance variables) in einer Klasse.
Zum Beispiel:
class Cat
end

cat = Cat.new
cat.name # => no method error
Wir haben keine Methode name in der Klasse Cat. Offensichtlich erhalten wir einen no method error.
Versuchen wir, einen Getter hinzuzufügen:
class Cat
  def name
    @name # gibt die Instanzvariable @name zurück
  end
end

cat = Cat.new
cat.name # => nil
Es scheint, als wäre etwas schiefgegangen. Aber alles ist richtig. Der Getter cat.name gibt nil zurück. Es gibt keinen 'no method error' mehr, das heißt, die Methode existiert und gibt die Instanzvariable @name der Klasse Cat zurück. Aber diese Variable ist leer. nil ist das erwartete Ergebnis.
In Ruby ist ein Getter eine Methode, die es ermöglicht, den Wert einer Instanzvariable (instance variable) in einer Klasse abzurufen. Getter werden so genannt, weil sie es ermöglichen, den Wert der Variable zu "erhalten" (get).
In Ruby werden Getter normalerweise verwendet, um den Zugriff auf die Werte von Variablen von außerhalb der Klasse zu ermöglichen, da Variablen normalerweise privat (private) und nicht direkt zugänglich sind. Getter ermöglichen einen kontrollierten Zugriff auf diese Werte.
Ein Versuch, einen Setter zu verwenden, führt zu einem no method error:
cat.name = 'Ruby'# => no method error
Das ist ebenfalls das erwartete Ergebnis. Wir haben keine Setter-Methode für name.
In Ruby ist ein Setter eine Methode, die es ermöglicht, den Wert einer Instanzvariable (instance variable) in einer Klasse zu setzen. Setter werden so genannt, weil sie es ermöglichen, Werte der Variablen zu "setzen" (set) (oder bestehende zu ändern).
In Ruby werden Setter verwendet, um die Werte von Variablen von außerhalb der Klasse kontrolliert zu ändern. 
class Cat
  def name
    @name # gibt die Instanzvariable @name zurück
  end

  def name=(str)
    @name = str
  end
end
Erstellen wir eine Instanz von Cat und rufen die Methode name (Getter) auf:
cat = Cat.new
cat.name # => nil
Hier ist alles richtig. Unsere Instanz ist derzeit leer. Wir müssen einen Wert über unsere neue Methode (Setter) übergeben.
cat.name = 'Ruby'
Wir sehen keinen Fehler. Also versuchen wir, den Wert über die Getter-Methode abzurufen:
cat.name # => Ruby
Alles funktioniert. Aber stellen Sie sich vor, Ihre Klasse hat nicht nur name, sondern Dutzende verschiedener Attribute (Alter, Farbe usw.). Jedes Mal Getter- und Setter-Methoden zu schreiben, ist nicht sehr praktisch.
Deshalb gibt es in Ruby solche Abkürzungen (attr_reader und attr_writer):
class Cat
  attr_reader :name
  attr_writer :name
end
 
:name - der Name des Attributs, für das eine Methode erstellt wird.
attr_reader ist eine Abkürzung für die Getter-Methode:
def name
  @name # gibt die Instanzvariable @name zurück
end
attr_writer ist eine Abkürzung für die Setter-Methode:
def name=(str)
  @name = str
end
Aber wenn wir beide Methoden - Setter und Getter - benötigen, müssen wir attr_reader und attr_writer für jedes Attribut duplizieren:
class Cat
  attr_reader :name
  attr_writer :name
  attr_reader :color
  attr_writer :color
end
Das ist prägnanter, als die Methoden vollständig zu schreiben, aber Ruby ermöglicht es uns, diesen Code noch weiter zu verkürzen. Hier benötigen wir attr_accessor.
class Cat
  attr_accessor :name
  attr_accessor :color
end
Entspricht der folgenden Schreibweise:
class Cat
  attr_reader :name
  attr_writer :name
  attr_reader :color
  attr_writer :color
end
Die Verwendung von attr_accessor, attr_reader und attr_writer vereinfacht die Erstellung von Zugriffsmethoden für Variablen in Klassen, und das ist besonders praktisch, wenn Sie nur einfach einen Wert einer Variablen abrufen oder setzen möchten, ohne zusätzliche Logik.
Ruby ermöglicht es, bereits das zu verkürzen, was man für verkürzt hielt. Hier ist eine Variante der kompakten Schreibweise von Attributen durch Kommas:
attr_reader :name, :color

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

10. Mai, 17:40 Uhr

Wie verwendet man Farben mit hexadezimalem CSS-Code und Alpha-Wert?

meme code
meme code@memecode
16. Mai, 20:02 Uhr

Was ist Origin in Git?

meme code
meme code@memecode
16. Mai, 22:17 Uhr

Wie entfernt man den Abstand zwischen Inline- und Inline-Block-Elementen?

meme code
meme code@memecode
17. Mai, 18:52 Uhr

Was ist eine Schleife in Javascript? Wie funktionieren die Schleifen for und while in Javascript?

meme code
meme code@memecode
22. Mai, 16:26 Uhr

Was ist der Unterschied zwischen <%, <%=, <%# und -%> in ERB-Vorlagen (Ruby on Rails)?

meme code
meme code@memecode
23. Mai, 06:57 Uhr

Was ist Debugging?

meme code
meme code@memecode
23. Mai, 11:16 Uhr

Wie funktioniert die has_many through Beziehung (many to many) in Ruby on Rails?

meme code
meme code@memecode
24. Mai, 18:53 Uhr

Was sind Joins in Ruby on Rails und wie funktionieren sie?

meme code
meme code@memecode
02. Jun, 06:42 Uhr

Fehler beim Hinzufügen von Personen zur Google Family. Die Seite konnte nicht geladen werden.

meme code
meme code@memecode
02. Jun, 12:53 Uhr

Was macht super in Ruby?

meme code
meme code@memecode
04. Jun, 21:19 Uhr

Wie klone ich ein GitHub-Repository?

meme code
meme code@memecode
23. Jun, 12:07 Uhr

Was ist Ubuntu? Wofür wird es verwendet?

meme code
meme code@memecode