Треки
/
Ruby
Ruby
/
Вправи
/
Порт Палермо
Порт Палермо

Порт Палермо

Навчальна вправа

Вступ

Символи - це іменовані ідентифікатори, які можна використовувати для посилання на значення. Символи створюються за допомогою літерала символу, тобто додаванням до назви символу :, наприклад :foo. Їх також можна записати в лапках, наприклад :"foo", що дозволяє, зокрема, використовувати пробіли в назві.

:foo # => :foo
:"foo boo" # => :"foo boo"

Символи використовуються в багатьох місцях мови, зокрема як ключі в хешах, для позначення назв методів і змінних.

Ідентифікатор

Символи відрізняються від рядків тексту (англ. string) тим, що вони є ідентифікаторами й не представляють дані чи текст. Це означає, що два символи з однаковою назвою завжди є одним і тим самим обʼєктом.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

Зміна символів

Символи незмінні, тобто їх не можна модифікувати. Це означає, що коли ми «змінюємо» символ, насправді ми створюємо новий символ. Є кілька методів, якими можна маніпулювати символами, і всі вони повертають нові символи. Усі методи можна знайти в API символів.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

Перевага незмінності символів у тому, що вони ефективніше використовують памʼять, ніж рядки тексту, а також безпечніші у використанні як ідентифікатори.

Перетворення

Символи можна перетворювати на рядки тексту й навпаки. Це може стати в нагоді, коли ми хочемо змінити символ або використати символ як рядок тексту. Щоб подати рядок тексту як символ, можна скористатися методом String#to_sym, а щоб зробити навпаки, скористатися методом Symbol#to_s. Оскільки символи мають обмежений набір методів, може бути корисно перетворити символ на рядок тексту, щоб застосувати до нього методи рядків, якщо потрібен новий символ.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

Вказівки

Порт Палермо - це жвава гавань, куди прибуває і звідки вирушає безліч кораблів. Уже давно тут діє ручна система обліку кораблів, які наразі перебувають у гавані. Ця система дуже схильна до помилок, тож начальник гавані вирішив замінити її на компʼютеризовану систему.

Начальник гавані найняв нас, щоб ми впровадили нову систему. Система має працювати з ідентифікаторами кораблів, а також пунктів призначення.

1. Створіть ідентифікатор порту

Перше, що потрібно зробити, - створити ідентифікатор для порту Палермо. Ідентифікатор складається з перших чотирьох літер назви порту, записаних великими літерами.

Визначте константу Port::IDENTIFIER як символ зі значенням :PALE.

Port::IDENTIFIER 
# => :PALE

2. Отримайте ідентифікатори для інших портів

Програма також має працювати з іншими портами, тож потрібно створити ідентифікатори і для них. Порт хотів би, щоб система була автоматизованою, а оскільки порти використовують різні правила найменування, ідентифікатори слід генерувати з назви порту. Ідентифікатор складається з перших чотирьох літер назви порту, записаних великими літерами.

Визначте метод Port.get_identifier, який приймає рядок тексту (англ. string) як аргумент і повертає ідентифікатор цього порту як символ.

Port.get_identifier("Hamburg") 
# => :HAMB

3. Визначте, до якого терміналу має пришвартуватися корабель

Порт має два термінали, і система має визначати, до якого терміналу має пришвартуватися корабель. Термінал визначається ідентифікатором корабля.

Ідентифікатор складається з 2 частин: перша - це 3 великі літери, які вказують, який вантаж везе корабель, а далі 3 цифри, унікальний ідентифікатор корабля.

Якщо ідентифікатор корабля містить OIL або GAS, корабель має пришвартуватися до терміналу A. Інакше корабель має пришвартуватися до терміналу B.

Визначте метод Port.get_terminal, який приймає символ як аргумент - ідентифікатор корабля. Метод має повертати термінал як символ.

Port.get_terminal(:OIL123)
# => :A
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Ruby Exercism

Час розпочати Порт Палермо?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Ruby, а також 21 концепція121 вправа та справжнє наставництво від людей, і все це безкоштовно.