Variáveis no Ruby
Ruby 29/09/07 às 20:09De forma abrangente, variáveis são endereços de memória a qual damos um nome, de forma que possamos usá-los para armazenar valores, e posteriormente recuperar estes valores.
Em geral, as variáveis precisam ser declaradas com um tipo, sendo que elas só podem armazenar valores deste tipo. Isto é o que se chama de tipagem estática. Já no Ruby as coisas funcionam de forma diferente. Uma variável no Ruby pode armazenar valores de qualquer tipo ao longo do tempo. Esta é a chamada tipagem dinâmica ou duck typing.
É importante notar que como todo dado em Ruby é um objeto, as variáveis sempre armazenarão referências a objetos. Isso significa que o mais perto que chegamos dos objetos são as referências armazenadas pelas variáveis, sendo que as referências são valores binários que nos permite acessar um objeto, atuando assim como intermediários. Além disso, devido a tipagem dinâmica, uma variável pode armazenar referências a objetos de diversas classes ao longo da sua vida.
Convenções de nomes de variáveis
O Ruby possui uma convenção de nomes para as sua variáveis, de forma que somente pelo nome possamos saber o escopo da variável. Mas é importante saber que esta não é apenas uma convenção cujo uso é recomendado, pelo contrário, ela de fato faz parte da sintaxe da linguagem. Sendo assim, uma vez que você cria uma variável, o escopo dessa variável será determinado pelo nome que você deu.
Quanto ao escopo, as variáveis podem ser variáveis locais, variáveis globais, variáveis de instância e variáveis de classe.
Variáveis locais
Variáveis locais são variáveis definidas dentro de um método, só existindo dentro dos limites daquele método específico. Os seus nomes devem começar com letras minúsculas ou com underscore(_), embora o mais comum seja que eles comecem com letras minúsculas mesmo. Exemplo de variável local: idade, nome_completo e data_de_nascimento.
Variáveis globais
Uma variável global é aquela que, uma vez criada, é acessível em qualquer parte do programa, existindo inclusive variáveis globais predefinidas no Ruby. A convenção de nomes diz que estas variáveis devem ter seu nome começando com $. $versao é um exemplo de nome de uma variável global.
Variáveis de instância
As variáveis de instância implementam os atributos de uma classe, e coletivamente representam o estado do objeto, sendo que cada objeto possui uma cópia de cada variável de instância definida na classe de forma independente dos outros objetos da mesma classe. A convenção do Ruby para os nomes de variáveis de instância é que elas comecem com @. Sendo assim, uma variável chamada @nome seria uma variável de instância.
Variáveis de classe
Algumas vezes, as classes precisam armazenar informações referentes a si próprias, ou seja, ter, de alguma forma, o seu próprio estado, e é aí que entram as variáveis de classe. Uma variável de classe é compartilhada entre todos os objetos desta classe, portanto podem ser usadas por cada um deles, e também pelos métodos de classe, sobre os quais falaremos no futuro. Além disso, dada uma certa classe, só existirá uma cópia de cada variável de classe dela, mesmo que existam dezenas de objetos desta classe. As variáveis de classe devem ter o seu nome começando com @@, como por exemplo a variável @@contador.
Algumas regras adicionais
Além das regras já mencionadas, depois do primeiro caractere do seu nome, uma varíavel só poder ter combinações de letras, números e o caractere de underscore. E quando uma variável possui mais de uma palavra no seu nome, as palavras são separadas pelo undescore. Além disso, o caractere após @ e @@ não pode ser um dígito, ou seja, @@1 e @2 são nomes de variáveis inválidos no Ruby.
E como fica isso tudo no irb?
No irb, podemos definir variáveis locais, globais, de instância e de classes, mesmo sem termos coisas como classes ou métodos. Para isto, basta aplicarmos as convenções de nome relativas a cada escopo.
Valores padrão
As variáveis de instância e globais possuem automaticamente nil como valores padrão, ou seja, você pode usar essas variáveis, por exemplo, imprimindo seus valores, mesmo que não tenha explicitamente atribuído nenhum valor para elas.
Já as variáveis locais e de classes precisam ser explicitamente inicializadas, caso contrário, quando você tentar utilizá-las acontecerá um erro. No caso das variáveis locais, o interpretador do Ruby pensará que você está tentando usar um método inexistente, já que os nomes de variáveis locais e métodos em parte seguem a mesma convenção de nomes. Já no caso das variáveis de classe, o interpretador conseguirá identificar que se tratam de variáveis de classe, gerando então a mensagem de erro apropriada, que no caso é a informação que variáveis de classe precisam ser inicializadas explicitamente.
Um último exemplo
Pra finalizar, abaixo há exemplos de todos os 4 escopos de variáveis do Ruby.
opcao = "Sim"
$versao = 1.0
@idade = 15
@@contador = 28
Acima temos, respectivamente, uma variável local, uma variável global, uma variável de instância e uma variável de classe.

[...] vimos de forma resumida como funcionam as variáveis no Ruby e também como gerar saída de dados com puts, print e printf, no entanto, até o momento, isto [...]
Ótima explicação, posso montar um excelente trabalho de faculdade =)
Bela explicação.
Obrigado. :)