Variáveis

Não é necessário declarar variáveis da forma comum (como em C, Smalltalk, etc.), mas é necessário que a variável exista para que possa ser usada. Por exemplo:

puts a # >> NameError: undefined local variable ...
a = nil
puts a # >> nil

Ou seja, pode-se considerar que a atribuição faz a declaração automaticamente. Porém, variáveis globais têm valor nil mesmo antes de serem inicializadas.

puts $global # >> nil
$global = "oi"
puts $global # >> oi

Em Ruby as variáveis têm seu escopo determinado pelo nome. De certa forma, isso "oficializa" o hábito de nomear os diferentes tipos de variáveis usando diferentes regras de nomenclatura, encontrado em outras linguagens (por ex.: iniciar nomes de classes com letras maiúsculas, terminar variáveis de instância com sublinhado, etc.).

Variáveis globais são iniciadas por $:

$variavel_global = "abc"

Constantes são iniciadas por letra maiúscula (classes são constantes). Atribuição a uma constante já inicializada gera um aviso, mas seu valor é alterado:

CONST = 3.1415    # >> 3.1415
CONST = 6.02e+23  # >> warning: already initialized constant Constante
puts CONST        # >> 6.02e+23

Note que o objeto a que a constante se refere pode ser alterado. Quando for desejável manter um objeto imutável, usa-se o método freeze (de Object).

Atributos de objetos (variáveis de instância) são iniciados por @, e não são acessíveis externamente diretamente. Estas variáveis devem ser inicializadas e usadas nos métodos de instância. Quando definidas no corpo da classe, ficam no contexto da classe (são atributos do objeto da classe):

class A
  @contexto = "classe"

  def initialize
    @contexto = "instância"
  end

  def contexto
    @contexto
  end

  def A.contexto
    @contexto
  end
end

a = A.new
a.contexto  # >> "instância"
A.contexto  # >> "classe"

Atributos de classe são iniciados por @@ e não são acessíveis externamente diretamente. Estas variáveis são compartilhadas por todas as subclasses também. São como variáveis globais em relação à uma hierarquia de classes/módulos.

class Carro
  @@marcas = [ "Ford", "GM", "Fiat", "VW" ]
end

E finalmente, variáveis locais, visíveis apenas no contexto do método/bloco/classe/módulo onde forem criadas, são iniciadas por letras minúsculas ou sublinhado:

variavel = 123
_variavel = "abc"

Algumas variáveis são especiais: true sempre se refere ao objeto booleano verdadeiro; false sempre se refere ao objeto booleano falso; nil sempre se refere ao objeto nulo; self sempre se refere ao objeto do método atual; __LINE__ é um Fixnum indicando a linha atual do código fonte; __FILE__ é uma String com o nome do arquivo fonte atual. Estes objetos são únicos, não podem ser clonados, e as variáveis não podem ser alteradas.

É importante dizer que, diferente de muitas linguagens, o valor 0 não é igual a false. Em expressões booleanas, os únicos valores falsos são false e nil, todos os outros são considerados verdadeiros.

Referências:

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados