Repaso: lista de contactos
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 11 de 57.
Desafío
IntermedioCompleta la clase Contact. name, email y phone se pueden leer. El establecedor email= almacena la dirección en minúsculas y genera ArgumentError con invalid email: x cuando no contiene @ o no contiene . después de @. El establecedor phone= conserva únicamente los dígitos y genera ArgumentError con invalid phone: x cuando quedan menos de 7 dígitos. initialize(name, email, phone) utiliza ambos establecedores. Dos contactos son iguales con == cuando sus direcciones de correo electrónico son iguales. to_s devuelve Ada (ada@mail.io, 5551234).
El código proporcionado lee los contactos como líneas con el formato name,email,phone. Imprime added Ada (ada@mail.io, 5551234), duplicate ada@mail.io para un contacto igual a uno ya agregado, o el mensaje de error, y finalmente contacts: 2.
Tu código va en contact.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
require_relative 'contact'
# Código de entrada/salida suministrado: mantenlo tal 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 las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online