Curso de Ruby - Variáveis e Tipos de Dados
Variáveis em Ruby
Ruby é uma linguagem dinamicamente tipada, o que significa que você não precisa declarar o tipo da variável. O interpretador infere automaticamente.
nome = "Rafael" # String
idade = 30 # Integer
altura = 1.75 # Float
maior_idade = true # Boolean
puts nome # Rafael
puts idade # 30
puts altura # 1.75
puts maior_idade # true
Convenções de Nomeação de Variáveis
No Ruby, existem diferentes tipos de variáveis com regras específicas:
Tipo de Variável | Exemplo | Descrição |
---|---|---|
Variável Local | nome = "Rafael" |
Começa com letra minúscula ou _ , acessível apenas no escopo onde foi definida. |
Variável de Instância | @idade = 30 |
Começa com @ , usada dentro de classes para armazenar valores do objeto. |
Variável de Classe | @@contagem = 0 |
Começa com @@ , usada para armazenar valores compartilhados entre todos os objetos da classe. |
Variável Global | $pi = 3.14 |
Começa com $ , pode ser acessada de qualquer lugar (⚠️ Evite usar muito). |
Constante | PI = 3.14 |
Começa com letra maiúscula, não pode ser alterada (mas Ruby permite um aviso se modificar). |
Exemplo:
nome = "João" # Variável local
$versao = "1.0" # Variável global
PI = 3.14 # Constante
puts nome
puts $versao
puts PI
No Ruby, existem dois tipos principais de variáveis que são cruciais para entender a programação orientada a objetos: variáveis de instância e variáveis de classe. Compreender a diferença entre elas é fundamental para escrever código Ruby eficaz.
Nesse momento não se preocupe pois vamos nos aprofundar nesse assunto no post referente a Orientação a Objetos em Ruby no decorrer do nosso curso.
Variáveis de Instância (@)
- Definição: Variáveis de instância são específicas para cada objeto (instância) de uma classe. Cada vez que você cria um novo objeto a partir de uma classe, esse objeto terá seu próprio conjunto de variáveis de instância.
- Escopo: O escopo de uma variável de instância é limitado ao objeto individual ao qual ela pertence. Isso significa que o valor de uma variável de instância pode ser diferente para cada objeto da mesma classe.
- Declaração: Variáveis de instância são declaradas usando um único caractere @ antes do nome da variável (por exemplo, @nome, @idade).
- Uso: Elas são usadas para armazenar informações que são únicas para cada objeto. Pense nelas como os atributos de um objeto.
- Exemplo: Imagine uma classe Cachorro. Cada cachorro tem um nome e uma raça diferentes. @nome e @raca seriam variáveis de instância porque cada objeto Cachorro teria seu próprio nome e raça.
Variáveis de Classe (@@):
- Definição: Variáveis de classe pertencem à própria classe e são compartilhadas por todos os objetos (instâncias) dessa classe. Existe apenas uma cópia de uma variável de classe, que é compartilhada por todas as instâncias da classe e até mesmo por subclasses.
- Escopo: O escopo de uma variável de classe é a classe e todas as suas instâncias. Se você modificar o valor de uma variável de classe, a alteração será refletida em todos os objetos daquela classe.
- Declaração: Variáveis de classe são declaradas usando dois caracteres @@ antes do nome da variável (por exemplo, @@numero_de_cachorros).
- Uso: Elas são usadas para armazenar informações que são comuns a todos os objetos de uma classe, ou para rastrear informações sobre a própria classe.
- Exemplo: Usando a classe Cachorro novamente, você poderia ter uma variável de classe @@total_cachorros para rastrear o número total de objetos Cachorro que foram criados. Cada vez que um novo objeto Cachorro é criado, você poderia incrementar @@total_cachorros. Este valor seria compartilhado por todos os objetos Cachorro.
Em resumo:
Característica | Variável de Instância (@) | Variável de Classe (@@) |
---|---|---|
A quem pertence | Objeto (instância) | Classe |
Compartilhamento | Não compartilhado (único por objeto) | Compartilhado por todos os objetos e subclasses |
Uso principal | Atributos únicos do objeto | Informações comuns à classe, rastreamento de classe |
Declaração | @nome_variavel | @@nome_variavel |
Exemplo:
class Cachorro
@@total_cachorros = 0 # Variável de classe para rastrear o número total de cachorros
def initialize(nome, raca)
@nome = nome # Variável de instância para o nome do cachorro
@raca = raca # Variável de instância para a raça do cachorro
@@total_cachorros += 1 # Incrementa a variável de classe cada vez que um cachorro é criado
end
# Método para acessar a variável de instância @nome
def nome_cachorro
@nome
end
# Método para acessar a variável de instância @raca
def raca_cachorro
@raca
end
# Método de classe para acessar a variável de classe @@total_cachorros
def self.total_cachorros
@@total_cachorros
end
# Método para exibir informações do cachorro, incluindo variáveis de instância e de classe
def exibir_info
puts "Nome do cachorro: #{@nome}"
puts "Raça do cachorro: #{@raca}"
puts "Total de cachorros criados até agora: #{@@total_cachorros}"
puts "---"
end
end
cachorro1 = Cachorro.new("Rex", "Labrador") # Criando instâncias da classe Cachorro (objetos cachorro)
cachorro1.exibir_info # Exibindo informações de cada cachorro
cachorro2 = Cachorro.new("Nina", "Poodle")
cachorro2.exibir_info
cachorro3 = Cachorro.new("Max", "Bulldog")
cachorro3.exibir_info
# Exibindo o total de cachorros usando o método de classe
puts "Número total de cachorros criados (acessado diretamente da classe): #{Cachorro.total_cachorros}"
Tipos de Dados
✅ Strings (String
)
nome = "Rafael"
puts nome.upcase # "RAFAEL"
puts nome.downcase # "rafael"
puts nome.length # 6
puts "Olá, #{nome}!" # Interpolação de string
✅ Números Inteiros (Integer
)
idade = 30
puts idade.class # Integer
puts idade.next # 31
puts idade.to_f # Converte para float
✅ Números Decimais (Float
)
altura = 1.75
puts altura.round(1) # Arredonda para 1 casa decimal
puts altura.to_i # Converte para inteiro
✅ Booleanos (true
e false
)
ligado = true
desligado = false
puts ligado && desligado # false
puts ligado || desligado # true
puts !ligado # false (negação)
✅ Arrays (Array
)
numeros = [1, 2, 3, 4, 5]
puts numeros[0] # Primeiro elemento -> 1
puts numeros.last # Último elemento -> 5
numeros.push(6) # Adiciona elemento
puts numeros.inspect # [1, 2, 3, 4, 5, 6]
✅ Dicionários (Hash
)
pessoa = { nome: "Rafael", idade: 30 }
puts pessoa[:nome] # Rafael
pessoa[:altura] = 1.75 # Adicionando novo dado
puts pessoa.inspect
Conversão de Tipos
🔄 Convertemos valores com .to_s
, .to_i
, .to_f
, .to_a
, etc.
num = "42"
puts num.to_i # Converte para inteiro -> 42
decimal = 3.14
puts decimal.to_s # Converte para string -> "3.14"
lista = "1,2,3".split(",") # ["1", "2", "3"]
puts lista.inspect
Exercícios
Agora, pratique resolvendo estes desafios:
1️⃣ Crie uma variável nome
e atribua seu nome a ela. Em seguida, exiba "Olá, [nome]!"
.
2️⃣ Crie uma variável e atribua a ela um número em formato de string e depois converta-o para inteiro. Multiplique por 2 e exiba o resultado.
3️⃣ Crie um Hash
para armazenar nome, idade e cidade de uma pessoa e exiba as informações.
Se quiser, tente resolver e envie nos comentários seus códigos e suas respostas para analisarmos juntos! 🚀
Próxima aula - Saída e Entrada de Dados