Menu
Coddy logo textTech

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.

challenge icon

Desafio

Médio

Complete 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

Pratique por conta própria: Compilador de Ruby online