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, 20:47 Uhr

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

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

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

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

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

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

Was ist Memoization in Ruby?

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

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

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

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

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

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

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

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

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

Was ist der Vanilla Rails-Ansatz?

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

Was ist Elasticsearch und wie funktioniert es?

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

Was ist eine Zeitreihen-Datenbank?

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

Was ist VACUUM in PostgreSQL?

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