Go to English Blog

Criando objetos de dados com OpenStruct

Leia em menos de um minuto

Imagine que você tenha um hash cujos atributos serão chamados muitas vezes durante um trecho de código.

user = {
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
}

puts user[:name]
puts user[:blog]
puts user[:style]
 

O hash, embora útil, ainda não é a forma mais prática. Seria muito mais conveniente se você pudesse acessar cada um dos atributos como se fossem métodos. Algumas pessoas que não conhecem a linguagem muito bem iriam estender a classe Hash, sobrescrevendo o método method_missing, como já vi algumas implementações por aí. Mas como você é um cara esperto, iria utilizar o OpenStruct.

O OpenStruct permite que você crie objetos com atributos que não estão atrelados a uma classe, mas ainda assim respondem como se fossem métodos, com getters e setters.

require 'ostruct'

user = OpenStruct.new({
  :name => 'John Doe',
  :blog => 'http://bleedingfromtheinside.com',
  :style => 'from uk'
})

puts user.name
puts user.blog
puts user.style
 

Muito melhor! Os atributos também podem ser modificados. Basta atribuir um valor qualquer.

user.style = 'emo'

Conheça a linguagem que está programando. O Ruby é muito simples de ser adaptado às suas necessidades, mas se você não conhecer a linguagem irá reinventar a roda e, quase sempre, sua solução não será a melhor nem a mais rápida.