Când avem nevoie de o clasă simplă care să grupeze câteva atribute (un DTO sau un Value Object), scrierea manuală a metodelor initialize, attr_reader și == este redundantă. Ruby oferă două instrumente native: Struct și modernul Data.define.
Data.define în Ruby 3.2+ (Obiecte de Valoare Imutabile)
# Data.define generează o clasă complet imutabilă (fără setter):
LocatieGPS = Data.define(:latitudine, :longitudine, :oras) do
# Putem adăuga metode suplimentare:
def descriere
"#{oras}: (#{latitudine}, #{longitudine})"
end
end
loc1 = LocatieGPS.new(latitudine: 44.4268, longitudine: 26.1025, oras: "București")
loc2 = LocatieGPS.new(latitudine: 44.4268, longitudine: 26.1025, oras: "București")
puts loc1.descriere
puts "Egalitate de valoare structurală: #{loc1 == loc2}" # true
# Imutabilitate garantată (încercarea de modificare aruncă NoMethodError):
# loc1.oras = "Cluj" -> Eroare!
# Crearea unei copii modificate cu metoda 'with':
loc3 = loc1.with(oras: "București Centru")
puts loc3.descriere
| Caracteristică | Struct |
Data.define (Ruby 3.2+) |
|---|---|---|
| Mutabilitate | Mutabil (are setteri x= impliciți) |
Imutabil (read-only, fără setteri) |
| Inițializare cu Keyword Args | Opțională (keyword_init: true) |
Nativă și pozițională ambele permise |
Metoda with (evoluție stări) |
Nu | Da (creează copie nouă cu modificări) |
Întrebări & Exemple de Cod:
Obiecte Imutabile și Structuri de Date în Ruby: Struct și Data.defineAi o nelămurire despre utilizarea comenzii
Obiecte Imutabile și Structuri de Date în Ruby: Struct și Data.definesau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.