IT Mídia
Notícias em destaque

Hash em Ruby

8 de fevereiro de 2011 00:31

Hash é uma estrutura de dados poderosa em Ruby. Os hashes são fundamentados em hash tables e servem para mapear objetos arbritários. Eles mantém um grupo de objetos conhecidos como chaves e associa um valor para cada chave.

Assim como arrays, hashes usam colchetes para buscar e definir valores dentro do hash. Mas ao invés de usar índices, usa-se as chaves dentro dos colchetes. Essas chaves podem conter qualquer tipo de objetos, mas strings e símbolos são normalmente utilizados. Veja um exemplo de hash:

Símbolos, strings escritas como identificadores imutáveis prefixados com dois pontos, são o tipo preferido para se utilizar nas chaves, pois além de serem imutáveis, eles são muito rápidos quando se faz comparação de igualdade entre eles. Veja o mesmo exemplo anterior, agora utilizando símbolos como chaves:

Uma maneira mais intuitiva de se criar hashes é através de uma lista separada por vírgulas de pares chave/valor. As chaves e os valores são separados pelos caracteres “=>”, que representam uma seta. Veja o exemplo:

O Ruby 1.9 suporta uma sintaxe ainda mais intuitiva e sucinta, muito parecida com objetos JSON.

Através da característica de tipagem dinâmica que o Ruby possui, é possível atribuir diferentes tipos de valores em um mesmo hash:

Claro que criar um hash com vários tipos nem sempre é uma boa alternativa. Procure manter uma coêrencia dos tipos dos valores que serão armazenados.

Iterando hashes

A maneira mais comum de iterar em elementos de um hash é através do método each. O primeiro parâmetro do bloco (key) recebe a chave e o segundo (value) o valor de cada elemento.

Iteradores somente para chaves ou somente para valores também estão disponíveis:

Usos comuns de hashes

No Ruby on Rails, os parâmetros passados em requisições Web, independente do método HTTP utilizado, são convertidos para um hash e armazenados em uma variável chamada params que fica disponível nos controladores. Abaixo segue um exemplo de um controlador com uma ação payment que utiliza o hash params:

Uma boa prática na programação orientada a objetos é não criar métodos com uma grande lista de parâmetros. Por exemplo, na classe abaixo, o método calculate possui quatro parâmetros:

Uma solução para o exemplo acima seria agrupar alguns parâmetros em uma classe, preferencialmente de uma forma que faça sentido na sua lógica de negócio, onde os parâmetros viram seus atributos.

Mas em Ruby, para situações como essa, usamos um hash no lugar de uma classe que somente carrega dados.

Quando o último parâmetro de um método recebe um hash, podemos omitir as chaves que envolvem os pares chave/valor.

O uso de hashes como parâmetros aumenta a legibilidade do código, pois deixa explícito para quem lê o que significado dos mesmos, sem precisar olhar a definição do método para lembrar o que é cada parâmetro.

TAGS: ruby

Sobre Fernando Hamasaki de Amorim

Desenvolvedor sênior na Locaweb, empresa na qual está desde 2007, Fernando Hamasaki de Amorim trabalha desde a criação até a arquitetura, modelagem, análise e integração de sistemas e aplicativos na companhia. Graduado em Tecnologia em Informática pela UniSant'Anna, o profissional possui pós-graduação em Tecnologias Web com Ênfase em Java pela Fiap. Já atuou em diversas outras companhias, tais como a TV Online, empresa brasileira pioneira em transmissões ao vivo e SAC Sistemas, que desenvolve ERP. Neste espaço, abordará temas envolvendo o desenvolvimento por meio da linguagem Ruby.

Entre em contato com Fernando Hamasaki de Amorim

Parceiros

Portais: IT Mídia | IT Web | Saúde Web

Publicações: InformationWeek Brasil | CRN Brasil | FH

Fóruns: IT Forum | IT Forum + | IT Business Forum | Saúde Business Forum