Fundamentos e prática
metodos.rb
def numeros_impares(min = 0, max)
(min..max).each do |numero|
puts "O número #{numero} é ímpar" if numero.odd?
end
end
def media(elementos)
elementos.sum / elementos.size
end
def rolar_dado(faces)
return 'número de faces precisa ser maior que 1' if faces <= 1
rand(faces) + 1
end
numeros_impares(80, 90)
puts '---'
numeros_impares(12)
# puts media([9, 1, 2])
# puts media([10, 20])
# puts rolar_dado(1)
# puts rolar_dado(6)
classes.rb
# 1ª demonstração
class Cachorro
def latir
puts "au au"
end
end
class Gato
def miar
puts "miau"
end
end
cachorro = Cachorro.new
cachorro.latir
Gato.new.miar
#################################################
# 2ª demonstração
class Conta
end
class Banco
def criar_nova_conta
Conta.new
end
end
banco = Banco.new
conta = banco.criar_nova_conta
escopo_de_variaveis.rb
class Pessoa
def definir_nome(novo_nome)
puts "O novo nome é #{novo_nome}"
@nome = novo_nome
end
def exibir_informacoes
puts "Nome: #{@nome}"
end
end
pessoa = Pessoa.new
pessoa.definir_nome('Lucas')
pessoa.exibir_informacoes
pessoa2 = Pessoa.new
pessoa2.definir_nome("Daniel")
pessoa2.exibir_informacoes
metodo_construtor.rb
class Pessoa
def initialize(nome, idade)
@nome = nome
@idade = idade
end
def exibir_informacoes
puts "#{@nome} tem #{@idade} anos."
end
end
pessoa = Pessoa.new('Joana', 45)
pessoa.exibir_informacoes
setters_and_getters.rb
class Produto
attr_reader :fabricante # somente leitura
attr_writer :preco # somente escrita
attr_accessor :nome, :codigo # ambos leitura e escrita
def initialize
@fabricante = 'Apple'
@codigo = 1234
end
end
celular = Produto.new
# celular.fabricante = 'LG' # tentando chamar o setter (x)
# puts celular.fabricante # tentando chamar o getter (✓)
# celular.preco = 1000 # tentando chamar o setter (✓)
# puts celular.preco # tentando chamar o getter (x)
# celular.nome = 'iPhone' # tentando chamar o setter (✓)
# puts celular.nome # tentando chamar o getter (✓)
# celular.codigo = 6789 # tentando chamar o setter (✓)
# puts celular.codigo # tentando chamar o getter (✓)
metodo_privado.rb
class Sorteio
def initialize(participantes)
@participantes = participantes
end
def sortear
return if @participantes.empty?
sorteado = @participantes.sample
puts "O participante sorteado foi: #{sorteado}!"
remover_participante(sorteado)
end
private
def remover_participante(participante)
@participantes.delete(participante)
end
end
participantes = ['Bruno', 'Gabriela', 'Leandro', 'Marcia']
sorteio = Sorteio.new(participantes)
sorteio.sortear
sorteio.sortear
sorteio.sortear
sorteio.sortear
sorteio.sortear
# Não é possível chamar o método privado abaixo:
# sorteio.remover_participante('qualquer coisa')
metodo_de_classe.rb
class Tempo
def self.agora
Time.now
end
# Podemos misturar métodos de classe e métodos de instância
# na mesma classe, sem problemas:
def alguma_coisa
puts "funciona!"
end
end
puts Tempo.agora
# tempo = Tempo.new
# tempo.alguma_coisa
# # ou...
Tempo.new.alguma_coisa