Повторение — список контактов
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 11 из 57.
Задание
СреднеЗавершите класс Contact. name, email и phone можно читать. Сеттер email= сохраняет адрес в нижнем регистре и вызывает ArgumentError с сообщением invalid email: x, если в нём нет @ или после @ нет .. Сеттер phone= оставляет только цифры и вызывает ArgumentError с сообщением invalid phone: x, если осталось менее 7 цифр. initialize(name, email, phone) использует оба сеттера. Два контакта считаются равными с помощью ==, если их адреса электронной почты равны. to_s возвращает Ada (ada@mail.io, 5551234).
Предоставленный код считывает контакты в строках формата name,email,phone. Он выводит added Ada (ada@mail.io, 5551234), duplicate ada@mail.io для контакта, равного уже добавленному, или сообщение об ошибке, а в конце — contacts: 2.
Ваш код должен находиться в contact.rb. В main.rb содержится предоставленный код ввода-вывода, и его нельзя редактировать.
Попробуйте сами
require_relative 'contact'
# Предоставленный код ввода/вывода: оставьте его как есть
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}"
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby