DEV Community 👩‍💻👨‍💻

Diego Novais
Diego Novais

Posted on • Updated on

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
Enter fullscreen mode Exit fullscreen mode
name = 'Diego Novais'
=> "Diego Novais"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode
defined? $version
=> "global-variable"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
person = Person.new
person.instance_variables
=> [:@name]
Enter fullscreen mode Exit fullscreen mode

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]
Enter fullscreen mode Exit fullscreen mode

Contato:
Email: contato@diegonovais.com.br
LinkedIn: https://www.linkedin.com/in/diegonovais/
Github: https://github.com/dnovais

Top comments (4)

Collapse
 
dnovais profile image
Diego Novais

Thanks for the comment, it's annotated and I'll add it to the content soon.

Collapse
 
evertonlopesc profile image
Everton Lopes

Ficou ótimo, parabéns!

Collapse
 
dnovais profile image
Diego Novais

Obrigado!

We are hiring! Do you want to be our Senior Platform Engineer? Are you capable of chipping in across sysadmin, ops, and site reliability work, while supporting the open source stack that runs DEV and other communities?

This role might just be for you!

Apply now