Variáveis - Ruby

Variáveis Locais

As variáveis locais são as mais comuns quando estamos utilizando o Ruby. Para usá-la basta que seja atribuído um valor à variável desejada. Vejam os exemplos:

x = 10
=> 10
name = 'Diego Novais'
=> "Diego Novais"

as variáveis possuem seu escopo, por ex. uma variável local exercerá seu papel apenas “no local” onde foi definida.

def my_name_is
  first_name = 'Diego'
  last_name = 'Novais'
end
=> :my_name_is

Se tentarmos imprimir uma das variáveis fora do escopo do método my_name_is teremos um erro:

irb(main):010:0> first_name
...
1: from (irb):10
NameError (undefined local variable or method `first_name' for main:Object)

Variáveis Globais $

O conceito de variável global é, basicamente, uma referência acessível em qualquer parte da aplicação. Existe uma convenção de nomes onde diz que estas variáveis devem ser iniciadas com $ (cifrão).

$version = "1.2.3"
=> "1.2.3"
defined? $version
=> "global-variable"

Variáveis de Instância @

As variáveis de instância são aquelas que ficam disponíveis para cada uma das instâncias de uma classe, ou seja, isoladamente em cada objeto. Ou seja, variáveis de instância implementam os atributos de uma classe, ou suas variáveis membro, e, coletivamente, representam o estado de um objeto. São definidas na classe de forma independente dos outros objetos da mesma classe.

Veja o exemplo:

class Person
  def initialize
    @name = "teste"
  end

  def speak
    "I'm speaking with you! #{@name}"
  end
end
=> :speak
person = Person.new
person.instance_variables
=> [:@name]

Variáveis de Classe @@

Variáveis de classe são responsáveis por guardar informações em um classe. Armazenam seu próprio estado e são compartilhadas entre todos os objetos e “atravessam” as heranças entre classes. Variáveis de classe devem ser iniciadas com @@ (2 arrobas).

Veja o exemplo:

class Animal
  @@kind = 'flying'

  def self.kind
    @@kind
  end
end

Animal.kind
=> "flying"

class Duck < Animal
  @@kind = 'walk'
end

Duck.kind
=> "walk"

Animal.class_variables
=> [:@@kind]

19