Definindo Classes
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 2 de 57.
Uma classe descreve um tipo de objeto: o que ele sabe e o que pode fazer. class Dog ... end declara a classe, e Dog.new cria um objeto dessa classe, uma instância. Um método definido com def dentro da classe pode ser chamado em cada instância:
class Dog
def speak
"Woof"
end
end
rex = Dog.new
puts rex.speak
puts rex.classSaída:
Woof
Dognew cria o objeto e, em seguida, chama seu método initialize com os argumentos que você forneceu a new. initialize configura o objeto, geralmente armazenando os argumentos em variáveis de instância, cujos nomes começam com @:
class Dog
def initialize(name)
@name = name
end
def speak
"#{@name} says Woof"
end
end
puts Dog.new("Rex").speak
puts Dog.new("Bella").speakSaída:
Rex says Woof
Bella says WoofOs métodos recebem argumentos como qualquer método Ruby e retornam o valor de sua última expressão. Cada chamada a new cria um objeto separado:
class Calculator
def add(a, b)
a + b
end
def average(numbers)
numbers.sum.to_f / numbers.size
end
end
calc = Calculator.new
puts calc.add(2, 3)
puts calc.average([1, 2, 3, 6])Saída:
5
3.0Nomes de classes são constantes escritas em CamelCase (BankAccount); nomes de métodos e variáveis usam snake_case (deposit_money). new verifica seus argumentos em relação a initialize, portanto um argumento ausente gera ArgumentError:
class Point
def initialize(x, y)
@x = x
@y = y
end
end
begin
Point.new(1)
rescue ArgumentError => e
puts e.message
endSaída:
wrong number of arguments (given 1, expected 2)Desafio
FácilComplete a classe Formatter. Seu método title(text) retorna o texto com cada palavra em letras maiúsculas (the hobbit resulta em The Hobbit), slug(text) retorna as palavras em letras minúsculas unidas por - (the-hobbit), e initials(text) retorna a primeira letra de cada palavra em letras maiúsculas (TH).
O código fornecido cria um Formatter e, para cada linha de entrada, imprime os três resultados em linhas separadas.
Seu código deve ficar em formatter.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'formatter'
# Código de entrada/saída fornecido: mantenha-o como está
input = []
while (line = gets)
input << line.chomp
end
formatter = Formatter.new
input.each do |line|
puts formatter.title(line)
puts formatter.slug(line)
puts formatter.initials(line)
end
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de Ruby online