Dicționare (Hashes) în Ruby: Sintaxa Modernă cu Simboluri, fetch și dig în Ruby

Ghid complet pentru dicționare (Hashes) în Ruby: sintaxa modernă cu chei simbol, accesul securizat prin fetch și dig, transformarea valorilor cu transform_values.

Sintaxă
profil = { nume: "Ana", rol: :admin }; profil.dig(:adresa, :oras)

Dicționarul (Hash) stochează perechi cheie-valoare. Începând cu Ruby 1.9+, dacă cheia este un simbol, sintaxa veche cu săgeată :nume => "Valoare" a fost simplificată prin plasarea caracterului două puncte după cheie: { nume: "Valoare" }.

Navigare sigură prin structuri complexe cu dig și fetch
# Declarare hash modern cu chei simbol:
utilizator = {
  id: 101,
  nume: "Elena Vasilescu",
  rol: :manager,
  contact: {
    email: "elena@exemplu.ro",
    adresa: {
      oras: "Brașov",
      cod_postal: "500123"
    }
  }
}

# 1. Navigare sigură în adâncime cu .dig (nu aruncă NoMethodError dacă o cheie lipsește):
oras = utilizator.dig(:contact, :adresa, :oras)
puts "Oraș: #{oras}" # "Brașov"

tara = utilizator.dig(:contact, :adresa, :tara)
puts "Țară: #{tara.inspect}" # nil (fără crash!)

# 2. Citire cu valoare fallback obligatorie prin .fetch:
telefon = utilizator.fetch(:telefon, "Număr nespecificat")
puts "Telefon: #{telefon}"

# 3. Transformare de valori cu .transform_values:
preturi_lei = { mere: 5, pere: 8, struguri: 12 }
preturi_euro = preturi_lei.transform_values { |lei| (lei / 5.0).round(2) }
puts "Prețuri calculate în EUR: #{preturi_euro.inspect}"