Recapitulação - Lista de Contatos
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 11 de 57.
Desafio
MédioComplete a classe Contact. name, email e phone podem ser lidos. O setter email= armazena o endereço em minúsculas e gera ArgumentError com invalid email: x quando ele não tem @ ou não tem . depois do @. O setter phone= mantém apenas os dígitos e gera ArgumentError com invalid phone: x quando restam menos de 7 dígitos. initialize(name, email, phone) usa ambos os setters. Dois contatos são iguais com == quando seus e-mails são iguais. to_s retorna Ada (ada@mail.io, 5551234).
O código fornecido lê os contatos como linhas no formato name,email,phone. Ele imprime added Ada (ada@mail.io, 5551234), duplicate ada@mail.io para um contato igual a um já adicionado, ou a mensagem de erro, e por fim contacts: 2.
Seu código deve ficar em contact.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'contact'
# Código de entrada/saída fornecido: mantenha-o como está
input = []
while (line = gets)
input << line.chomp
end
contacts = []
input.each do |line|
name, email, phone = line.split(",")
begin
contact = Contact.new(name, email, phone)
if contacts.include?(contact)
puts "duplicate #{contact.email}"
else
contacts << contact
puts "added #{contact}"
end
rescue ArgumentError => e
puts e.message
end
end
puts "contacts: #{contacts.size}"
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