L'hash è la struttura dati che userai di più in Ruby. Oltre a [], ha metodi che risolvono problemi ricorrenti.
config = { host: "localhost", port: 3000 }
config.fetch(:port) # 3000
config.fetch(:timeout, 30) # 30 (default se manca)
config.dig(:db, :name) # nil, senza esplodere su chiavi annidate
prezzi = { pane: 2, latte: 1 }
prezzi.transform_values { |v| v * 1.1 } # aumento del 10%
prezzi.sum { |_, v| v } # 3
fetch con un default evita i nil a sorpresa; dig naviga strutture annidate senza mille controlli; transform_values e each_with_object costruiscono nuovi hash in modo pulito.
Conoscere questi metodi significa scrivere meno if key, e lasciare che sia l'hash a gestire i casi limite.