Ruby “gotchas”

05out07

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.

Anúncios


No Responses Yet to “Ruby “gotchas””

  1. Deixe um comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: