名牌

名牌

學習練習

簡介

Nil

Nil 是英文單字,意思是「nothing」或「zero」。在 Elixir 中,nil 是一個特殊的值,代表值的_缺失_。

# I do not have a favorite color
favorite_color = nil

在其他程式語言中,null 或 none 這類值可能扮演類似的角色。

If

除了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"

這種語法對非常短的運算式很有幫助,但如果運算式無法放在單行上,就應該避免使用。

Truthy 與 falsy

在 Elixir 中,所有資料型態在布林脈絡下(例如if運算式)都會得出 truthy 或 falsy 的值。除了false和nil以外,所有資料都視為 truthy。特別是空字串、整數0和空陣列,在 Elixir 裡都視為 truthy。

說明

在這道練習中,你將撰寫程式碼,替工廠員工印出名牌。員工有 ID、名字和部門名稱。員工名牌標籤的格式如下:"[id] - name - DEPARTMENT"。

1. 印出員工的名牌

實作NameBadge.print/3函式。這個函式會接收 ID、名字和部門,並回傳名牌標籤,其中部門名稱以大寫表示。

NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"

2. 印出新進員工的名牌

由於電腦系統的一個古怪設計,新進員工剛開始在工廠工作時,偶爾還沒有 ID。因為名牌是必須佩戴的,他們會拿到一個沒有 ID 前綴的臨時名牌。

擴充NameBadge.print/3函式。當 ID 缺少時,印出的名牌就不包含 ID。

NameBadge.print(nil, "Robert Johnson", "Procurement")
# => "Robert Johnson - PROCUREMENT"

3. 印出老闆的名牌

就算是工廠老闆,也必須隨時佩戴名牌。不過,老闆沒有部門。在這種情況下,標籤應該印出"OWNER",而不是部門名稱。

擴充NameBadge.print/3函式。當部門缺少時,假設這個名牌是屬於公司老闆的。

NameBadge.print(204, "Rachel Miller", nil)
# => "[204] - Rachel Miller - OWNER"

注意,老闆也可能同時是新進員工。

NameBadge.print(nil, "Rachel Miller", nil)
# => "Rachel Miller - OWNER"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 名牌 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。