Operador ||= em Ruby


English Version (Google Translate)

Em Ruby temos vários comandos e operadores que a primeira vista nos deixam em dúvida quando estamos iniciando mas depois que aprendemos começamos a sentir muita falta quando trabalhamos em linguagens que não os tem. Coisas como Blocos ou funções anônimas, Módulos , <=>, =~, .., ..., $1 e muitos outros.

E questionado por um amigo sobre a diferença entre em ||= e = resolvi fazer este postzinho rápido.

Basicamente a repostas do que é o ||= (chamado de atribuição condicional) se resume em, um idioma comum em Ruby usado para atribuir um valor a variável apenas se ela ainda não existir.

Então funcionaria tipo:

animal ||= "Dog"

Então se animal não tiver um valor ainda ele será definido para “Dog”. Então a dúvida é: quando utilizaremos isto? E eu respondo, muitas vezes, como abaixo:

  def transactions
    @transactions ||= []
  end

Então é um operador ótimo para definir valores padrão e desenvolver alguma forma de memoize/cache para algo que não muda com muita frequência.

Bem, acho que é isto. Se alguém lembrar de algum exemplo ou de algo que eu tenha esquecido por favor complete nos comentários.


3 Comentários to “Operador ||= em Ruby”

Rafael diz:

Daniel, muito bom, estava esses dias mesmo procurando por esta explicação.

Obrigado.

Rafael


Junio Vitorino diz:

Putz, já posso até fazer os comparativos em outras linguagens e realmente o que um =|| não faria em algumas das que mais uso, já que para fazer o que esse simples operador faz tenho muito mais trabalho.

Valeu Daniel.


Ismael Stahelin diz:

Bom post, simples e que apaga a dúvida de muita gente. Geralmente o pessoal não escreve sobre essas coisas, talvez porque os experientes achem que todos sabem. É o tipo de informação que as vezes é difícil de encontrar rapidamente.


Comentário