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]
Contato:
Email: contato@diegonovais.com.br
LinkedIn: https://www.linkedin.com/in/diegonovais/
Github: https://github.com/dnovais
Top comments (3)
Thanks for the comment, it's annotated and I'll add it to the content soon.
Ficou ótimo, parabéns!
Obrigado!