Nil 是英文單字,意思是「nothing」或「zero」。在 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 中,所有資料型態在布林脈絡下(例如if運算式)都會得出 truthy 或 falsy 的值。除了false和nil以外,所有資料都視為 truthy。特別是空字串、整數0和空陣列,在 Elixir 裡都視為 truthy。
在這道練習中,你將撰寫程式碼,替工廠員工印出名牌。員工有 ID、名字和部門名稱。員工名牌標籤的格式如下:"[id] - name - DEPARTMENT"。
實作NameBadge.print/3函式。這個函式會接收 ID、名字和部門,並回傳名牌標籤,其中部門名稱以大寫表示。
NameBadge.print(67, "Katherine Williams", "Strategic Communication")
# => "[67] - Katherine Williams - STRATEGIC COMMUNICATION"
由於電腦系統的一個古怪設計,新進員工剛開始在工廠工作時,偶爾還沒有 ID。因為名牌是必須佩戴的,他們會拿到一個沒有 ID 前綴的臨時名牌。
擴充NameBadge.print/3函式。當 ID 缺少時,印出的名牌就不包含 ID。
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"