Carlos Brando

Nome do Jogo

Ruby 1.9 #1: Argumentos em blocos

O Ruby 1.9 está ai e já passou da hora de começarmos a ver quais são algumas das novidades mais importantes desta nova versão da nossa linguagem de programação preferida.

À partir da versão 1.9 argumentos criados dentro de blocos terão seu escopo limitado ao mesmo. Para entender melhor, vejamos um exemplo de código executado na versão 1.8.6 e logo em seguida na versão 1.9:

i = "Olá"
3.times { |i| puts i }
puts i
# 0
# 1
# 2
# 2

Note que no código acima ao alterar a variável i dentro do bloco (o método times atribui um novo valor a cada execução) acabamos também alterando a variável com o mesmo nome que foi declarada fora do bloco. Embora isto não seja um bug, mas sim uma característica do Ruby nesta versão, raramente (talvez nunca) vamos desejar este comportamento.

Agora o mesmo código sendo executado na versão 1.9:

i = "Olá"
3.times { |i| puts i }
puts i
# 0
# 1
# 2
# "Olá"

Desta vez a execução do bloco não alterou a variável externa i. Toda variável criada dentro de um bloco no Ruby 1.9 só existirá dentro do escopo do bloco, por isto cuidado com seus códigos malucos ao migrar para esta nova versão!

Comments