Ruby 3 ha portato il pattern matching: con case/in fai match sulla struttura dei dati, non solo sul valore.
response = { status: "ok", data: { name: "Falcon 9", provider: "SpaceX" } }
case response
in { status: "ok", data: { name:, provider: } }
puts "#{name} di #{provider}"
in { status: "error", message: }
puts "Errore: #{message}"
else
puts "Formato sconosciuto"
end
Nota la potenza: name: e provider: non solo verificano che le chiavi esistano, ma estraggono i valori in variabili locali. Puoi fare match su array, tipi (in Integer), condizioni (in n if n > 0).
È perfetto per gestire risposte di API con forme diverse: descrivi la forma che ti aspetti e Ruby ti dà i dati già spacchettati.