Hoje vamos continuar falando de Ruby, é hora de nos aprofundar falando um pouco de Variáveis não inicializadas
Variáveis não inicializadas
Em geral, você deve sempre atribuir um valor para, ou inicializar as variáveis antes de usá-las em expressões. Em algumas circunstâncias, no entanto, Ruby lhe permitirá utilizar variáveis que ainda não foram inicializadas. As regras são diferentes para diferentes tipos de variáveis:
Variáveis de classe
Variáveis de classe deve sempre ter um valor atribuído a elas antes que serem utilizadas. Ruby levanta uma NameError se
referir a uma variável de classe à qual nenhum valor foi atribuído.
Variáveis de instância
Se você se referir a uma variável de instância não inicializada, Ruby retorna nil. Considera-se má programação de
contar com esse comportamento, no entanto. Ruby vai emitir um aviso sobre a variável não inicializada se você executá-la
com a opção -w.
As variáveis globais
Variáveis globais não inicializadas são como o exemplo de variáveis não inicializadas: elas igualam a nil, mas mostra
um aviso quando o Ruby é executado com o flag do -w.
As variáveis locais
Este caso é mais complicado que os outros, porque variáveis locais não têm um caractere de pontuação como um prefixo.
Este significa que variáveis locais referênciam olhando apenas como uma invocação de método de expressões. Se o
interpretador Ruby tem visto uma atribuição de uma variável local, ele sabe que é uma variável e não um método,
e pode retornar o valor da variável. Se não tiver havido nenhuma atribuição, então o Ruby trata a expressão como uma
invocação de método. Se nenhum método com esse nome existe, Ruby levanta um NameError.
Em geral, portanto, a tentativa de usar uma variável local antes de ter sido inicializada resulta em um erro. Existe
uma peculiaridade, uma variável passa a existir quando o interpretador Ruby vê uma expressão de atribuição para essa
variável. Este é o caso, mesmo se essa atribuição não é realmente executada. A variável que existe, mas não foi
atribuído um valor, é dado o valor nulo como padrão. Por exemplo:
1 2 3 |
|
Até a próxima.. :)