Fork me on GitHub

Keep Learning Conhecimento nunca é o bastante

Postado em
5 October 2007 @ 15:49

Tag(s)
Ruby

Ruby “gotchas”

Para quem está migrando dos mundos Java ou .NET, Ruby reserva algumas surpresas. Como estamos acostumados a linguagens estáticas e outros detalhes como declaração de variáveis e tipos primitivos, acabamos caindo nessas “pegadinhas” algumas vezes.

Veja alguns exemplos:

.
false e nil são os únicos valores falsos válidos, todo o restante é verdadeiro:

irb(main):001:0> p "verdadeiro?" if 1 == true
=> nil
irb(main):002:0> p "verdadeiro?" if 0 == false
=> nil
irb(main):003:0> p "verdadeiro?" if nil
=> nil
irb(main):004:0> p "verdadeiro?" if 6
"verdadeiro?"
=> nil
irb(main):005:0> p "verdadeiro?" if -6
"verdadeiro?"
=> nil
irb(main):005:0> p "verdadeiro?" if 0
"verdadeiro?"
=> nil

Declaração dinâmica de variáveis e escopo:

class Foo
 attr_accessor :bar
  def initialize(value)
   bar = value
 end
end

puts Foo.new(42).bar
=> nil

No caso acima, o Ruby cria a variável “bar” com escopo local ao método initialize e não utiliza o método acessor definido para a variável de instância @bar, o que é o correto de acordo com o comportamento da linguagem e estranho para quem vem das linguagens estáticas.

O correto seria:

class Foo
 attr_accessor :bar
  def initialize(value)
   self.bar = value #ou @bar = value
 end
end

puts Foo.new(42).bar
=> 42

Se você conhece mais algum, deixe um comentário.


Nenhum comentário até agora


Nenhum comentário ainda. Você pode ser o primeiro!

Deixe um comentário