名札

名札

学習演習

はじめに

nil

nilは、英語で「何もない」や「ゼロ」を意味する言葉です。Elixirでは、nilは値が_存在しない_ことを表す特別な値です。

# I do not have a favorite color
favorite_color = nil

ほかのプログラミング言語では、nullやnoneという値が同じような役割を果たすことがあります。

if

condのほかに、Elixirにはif/2というマクロもあります。これは、条件を1つだけ調べたいときに役立ちます。

if/2は、条件と2つの選択肢を受け取ります。条件が_真とみなされる_場合は1つ目の選択肢を、_偽とみなされる_場合は2つ目の選択肢を返します。

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式を1行で書くこともできます。条件のあとにカンマがあることに注目してください。

if age > 16, do: "beer", else: "no beer"

この書き方は、ごく短い式には便利ですが、1行に収まらない式には使わないようにしましょう。

真とみなされる値 と 偽とみなされる値

Elixirでは、すべてのデータ型は、if式のような真偽値の文脈で出てくると、_真とみなされる値_か_偽とみなされる値_のどちらかに評価されます。falseとnil以外のデータは、すべて_真とみなされる値_と見なされます。特に、空の文字列、整数の0、空のリストは、Elixirではすべて_真とみなされる値_です。

説明

この演習では、工場の従業員向けの名札を出力するコードを書きます。従業員には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を学んでマスターできます。すべて無料です。