Método fetch em Ruby

Dicas - 24/Mai/2020 - por André Kanamura

Anteriormente apresentamos o método dig para lidar com hashes e arrays em Ruby. Neste artigo, vamos falar de outro método interessante: o fetch. Considere o código a seguir:

dictionary = { 'bread' => 'pão',
               'butter' => 'manteiga', 
               'egg' => 'ovo',
          'milk' => 'leite'
}

dictionary['egg']
#=> "ovo"

dictionary['knife']
#=> nil

dictionary.fetch('egg')
#=> "ovo"

dictionary.fetch('knife')
#=> KeyError (key not found: "knife")

Primeiramente, notamos que o método fetch funciona exatamente para obter o valor associado a uma chave numa hash em Ruby. No entanto, quando a chave procurada não existe na hash, o comportamento é diferente. Note como, usando o fetch, conseguimos um erro do tipo KeyError, que apresenta o dado responsável pelo problema, no lugar de retornar apenas nil.

Vimos que quando o fetch recebe apenas um argumento, ele sobe o erro KeyError caso a chave não seja encontrada. No entanto, podemos configurar para o método um valor padrão que previne o erro KeyError. Isso pode ser feito de duas maneiras:

# Usando um valor que retorna caso a chave não seja encontrada
dictionary.fetch('knife', 'retorno padrão')
#=> "retorno padrão"

# Passando um bloco a ser executado caso a chave não seja encontrada
dictionary.fetch('knife') { |key| "Key #{ key } not found" }
#=> "Key knife not found"

Bonus: fetch_values

Existe também o método fetch_values em Ruby, que aceita mais de uma chave como argumento e retorna os resultados dentro de um array.

Referências

Foto de perfil do autor
André Kanamura

Dev na Campus Code