Criando e acessando hashes
Um hash pareia chaves com valores
Arrays guardam valores pela posição, como fruits[0] para o primeiro. Um hash guarda cada valor sob um nome, uma chave, e o busca por esse nome.
user = { name: "Ada", role: "admin", active: true }
{...} é o literal de hash. Cada entrada é uma chave e um valor unidos por dois-pontos: name: "Ada" junta a chave :name com "Ada". Essa forma curta só funciona com chaves symbol, de Símbolos vs strings, escritas sem os dois-pontos na frente.
A sintaxe mais antiga: qualquer tipo de chave
user = { "name" => "Ada", 1 => "one", :active => true }
A sintaxe => ("hash rocket") aceita qualquer objeto como chave: uma string, um número, até outro hash. Código Rails usa a forma curta com symbol em quase todo lugar. A seta aparece quando a chave não é symbol, ou em código anterior ao Ruby 1.9, que trouxe a forma curta.
Lendo um valor pela sua chave
user = { name: "Ada", role: "admin" }
user[:name] # => "Ada"
user[:role] # => "admin"
user[:missing] # => nil, sem erro, igual à leitura fora dos limites de um array
user[:name] busca o valor ligado a :name. Uma chave que nunca foi definida lê como nil, como fruits[10] no curso de arrays.
Chaves string e chaves symbol são chaves diferentes
Isso pega quase todo mundo uma vez: :name e "name" são chaves diferentes.
user = { name: "Ada" }
user[:name] # => "Ada", a chave symbol
user["name"] # => nil, uma chave string nunca foi definida
É a distinção do curso de symbols aplicada a buscas. Um hash feito com chaves symbol só responde a symbols; uma string parecida não casa.
Pontos-chave
- Um literal de hash pareia chaves e valores com
:(atalho de chave symbol) ou=>(qualquer tipo de chave):{ name: "Ada" }ou{ "name" => "Ada" }. hash[chave]lê um valor; uma chave ausente devolvenil, nunca erro.:namee"name"são chaves diferentes e nunca casam entre si.- Código Rails prefere a forma curta com symbol; a seta aparece para chaves que não são symbol.
Continue com a aula 2
Adicionando, atualizando e removendo
Usar hash[chave] = valor para adicionar ou atualizar, delete para remover, e como ambos alteram o hash original.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.