Слово Nil в англійській мові означає «ніщо» або «нуль». В Elixir nil - це особливе значення, яке означає відсутність значення.
# I do not have a favorite color
favorite_color = nil
В інших мовах програмування подібну роль можуть відігравати значення null або none.
Крім cond, Elixir також надає макрос if/2, який стає в пригоді, коли потрібно перевірити лише одну умову.
if/2 приймає умову та два варіанти. Він повертає перший варіант, якщо умова truthy, і другий варіант, якщо умова falsy.
age = 15
if age >= 16 do
"You are allowed to drink beer in Germany."
else
"No beer for you!"
end
# => "No beer for you!"
Вираз if можна також записати в один рядок. Звернімо увагу на кому після умови.
if age > 16, do: "beer", else: "no beer"
Цей синтаксис стає в пригоді для дуже коротких виразів, але його варто оминати, якщо вираз не вміщується в один рядок.
В Elixir усі типи даних набувають значення truthy або falsy, коли потрапляють у булевий контекст (англ. Boolean), наприклад у вираз if. Усі дані вважаються truthy крім false та nil. Зокрема, порожні рядки тексту (англ. string), ціле число 0 та порожні масиви в Elixir теж вважаються truthy.
У цій вправі ми будемо писати код, який друкує іменні бейджі для працівників фабрики. Працівники мають ідентифікатор, імʼя та назву відділу. Мітки на бейджах працівників мають такий формат: "[id] - name - DEPARTMENT".
Реалізуйте функцію NameBadge.print/3. Вона має приймати ідентифікатор, імʼя та відділ. Вона має повертати мітку бейджа, у якій назва відділу записана великими літерами.
NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"
Через особливість компʼютерної системи нові працівники іноді ще не мають ідентифікатора, коли починають працювати на фабриці. Оскільки бейджі обовʼязкові, вони отримають тимчасовий бейдж без префікса з ідентифікатором.
Розширте функцію NameBadge.print/3. Якщо ідентифікатор відсутній, вона має друкувати бейдж без нього.
NameBadge.print(nil, "Robert Johnson", "Procurement")
# => "Robert Johnson - PROCUREMENT"
Навіть власник фабрики мусить постійно носити бейдж. Однак у власника немає відділу. У цьому випадку замість назви відділу на мітці потрібно надрукувати "OWNER".
Розширте функцію NameBadge.print/3. Якщо відділ відсутній, вважайте, що бейдж належить власнику компанії.
NameBadge.print(204, "Rachel Miller", nil)
# => "[204] - Rachel Miller - OWNER"
Зауважте, що власник може бути одночасно і новим працівником.
NameBadge.print(nil, "Rachel Miller", nil)
# => "Rachel Miller - OWNER"
Зареєструйтеся на Exercism, щоб вивчати й опановувати Elixir, а також 58 концепцій168 вправ та справжнє наставництво від людей, і все це безкоштовно.