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"
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.