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

Variablen in Ruby: @, @@ und Klasseninstanzvariablen

Beitrags-Cover: Variablen in Ruby: @, @@ und Klasseninstanzvariablen
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
In Ruby gibt es mehrere Arten von Variablen, die sich dadurch unterscheiden, wem sie gehören - einem Objekt, einer Klasse oder allen Nachkommen gleichzeitig. Lassen Sie uns das einfach und mit Beispielen klären.

@ - Instanzvariable (instance variable)

Das ist eine gewöhnliche Variable, die einem bestimmten Objekt gehört. Jedes Objekt einer Klasse hat seine eigene Kopie dieser Variable.
class User
  def initialize(name)
    @name = name
  end

  def name
    @name
  end
end

u1 = User.new("Oleh")
u2 = User.new("Ira")

u1.name  # => "Oleh"
u2.name  # => "Ira"
Jeder Benutzer hat seinen eigenen Namen. @name wird nicht zwischen Objekten geteilt - das sind ihre persönlichen Daten.

@@ - Klassenvariable (class variable)

Eine Variable mit zwei @-Zeichen (@@) ist gemeinsam für alle Instanzen und Unterklassen. Sie lebt innerhalb der gesamten Klassenhierarchie.
class Animal
  @@count = 0

  def initialize
    @@count += 1
  end

  def self.count
    @@count
  end
end

class Dog < Animal; end

a1 = Animal.new
d1 = Dog.new

Animal.count  # => 2
Dog.count     # => 2
Sowohl Animal als auch Dog sehen dieselbe Variable @@count. Wenn die Unterklasse sie ändert, hat das Auswirkungen auf die Elternklasse. Aus diesem Grund gilt @@ als gefährliche und veraltete Praxis - es ist besser, ihre Verwendung zu vermeiden.

Klasseninstanzvariable - sichere Alternative zu @@

Man kann eine Variable auf Klassenebene erstellen, aber so, dass sie nur dieser Klasse gehört und nicht den Nachkommen. Das ist eine gewöhnliche @-Variable, aber auf der Ebene der Klasse selbst deklariert (und nicht innerhalb von initialize).
class User
  @count = 0

  def self.add_user
    @count += 1
  end

  def self.count
    @count
  end
end

class Admin < User; end

User.add_user
User.count   # => 1
Admin.count  # => nil
In diesem Beispiel hat User seine eigene @count, und Admin hat eine separate (anfangs nil, bis sie definiert wird). Das macht den Code sicher und vorhersehbar.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

==, gleich?, eql?, === in Ruby: was sie überprüfen und wann man sie verwenden sollte
29. Okt '25, 20:47 Uhr

==, gleich?, eql?, === in Ruby: was sie überprüfen und wann man sie verwenden sollte

Нотатки про Ruby та RoR
Include, Extend, Prepend in Ruby: wie sie funktionieren und wo der Unterschied liegt
29. Okt '25, 21:20 Uhr

Include, Extend, Prepend in Ruby: wie sie funktionieren und wo der Unterschied liegt

Нотатки про Ruby та RoR
module_function in Ruby: wenn die Methoden eines Moduls sowohl als Modulmethoden als auch als Funktionen verfügbar sind
29. Okt '25, 21:53 Uhr

module_function in Ruby: wenn die Methoden eines Moduls sowohl als Modulmethoden als auch als Funktionen verfügbar sind

Нотатки про Ruby та RoR
Was ist Memoization in Ruby?
30. Okt '25, 10:17 Uhr

Was ist Memoization in Ruby?

Нотатки про Ruby та RoR
is_a?, kind_of?, instance_of? — wie prüft Ruby den Typ eines Objekts?
30. Okt '25, 19:55 Uhr

is_a?, kind_of?, instance_of? — wie prüft Ruby den Typ eines Objekts?

Нотатки про Ruby та RoR
&& vs and — der Unterschied in Ruby, der Ihren Code brechen kann
30. Okt '25, 20:23 Uhr

&& vs and — der Unterschied in Ruby, der Ihren Code brechen kann

Нотатки про Ruby та RoR
Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby
30. Okt '25, 21:06 Uhr

Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby

Нотатки про Ruby та RoR
Was ist Middleware in Ruby on Rails und wann wird sie verwendet?
4. Nov '25, 10:39 Uhr

Was ist Middleware in Ruby on Rails und wann wird sie verwendet?

Нотатки про Ruby та RoR
Was ist der Vanilla Rails-Ansatz?
14. Nov '25, 16:48 Uhr

Was ist der Vanilla Rails-Ansatz?

Нотатки про Ruby та RoR
Was ist Elasticsearch und wie funktioniert es?
22. Nov '25, 12:35 Uhr

Was ist Elasticsearch und wie funktioniert es?

Нотатки про Ruby та RoR
Was ist eine Zeitreihen-Datenbank?
22. Nov '25, 12:42 Uhr

Was ist eine Zeitreihen-Datenbank?

Нотатки про Ruby та RoR
22. Nov '25, 12:49 Uhr

Was ist VACUUM in PostgreSQL?

Нотатки про Ruby та RoR