키워드 배열은 키-값 데이터 구조예요.
[month: "April", year: 2018]
키워드 배열은 {key, value} 튜플의 배열이고, 같은 형태로 쓸 수도 있지만 더 짧은 문법이 더 널리 쓰여요.
[month: "April"] == [{:month, "April"}]
# => true
키워드 배열의 키는 반드시 아톰이어야 하지만, 값은 무엇이든 될 수 있어요. 각 키는 한 번 이상 사용할 수 있어요. 키워드 배열의 키-값 쌍에는 순서가 있어요.
키워드 배열은 배열과 같은 방식으로 다룰 수도 있고, Keyword 모듈을 사용할 수도 있어요.
규모가 큰 와인 저장고를 갖춘 고급 레스토랑의 매니저로 일하고 있어요. 손님 중에는 까다로운 와인 애호가가 많죠. 특정 손님에게 딱 맞는 와인 한 병을 찾는 일은 쉽지 않아요.
IT에 능숙한 레스토랑 사장님답게, 앱을 만들어서 와인 선택 과정을 더 빠르게 하기로 했어요. 이 앱을 이용하면 손님이 취향에 따라 와인을 걸러 볼 수 있어요.
앱의 시작 화면에서 와인 색상별로 짧은 설명을 보여 주고 싶어요.
WineCellar.explain_colors/0 함수를 구현해요. 이 함수는 인자를 받지 않고, 와인 색상을 키로, 설명을 값으로 하는 키워드 리스트를 반환해요.
| Color | Explanation |
|---|---|
:white |
Fermented without skin contact. |
:red |
Fermented with skin contact using dark-colored grapes. |
:rose |
Fermented with some skin contact, but not enough to qualify as a red wine. |
와인 한 병은 포도 품종, 연도, 원산지 국가로 이루어진 3-튜플로 표현해요. 와인은 색상별로 키워드 리스트에 저장돼 있어요.
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
]
WineCellar.filter/3 함수를 구현해요. 이 함수는 와인 키워드 리스트, 색상을 나타내는 atom, 옵션 키워드 리스트를 인자로 받고, 옵션의 기본값은 []예요. 주어진 색상의 와인 리스트를 반환해야 해요.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white
)
# => [
# {"Chardonnay", 2015, "Italy"},
# {"Pinot grigio", 2017, "Germany"}
# ]
WineCellar.filter/3 함수를 확장해요. :year 옵션이 주어지면, 주어진 색상이면서 주어진 연도의 와인 리스트를 반환해야 해요.
이미 구현된 WineCellar.filter_by_year/2 함수를 사용해요. 이 함수는 와인 리스트와 연도를 인자로 받아, 주어진 연도의 와인 리스트를 반환해요.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015
)
# => [
# {"Chardonnay", 2015, "Italy"}
# ]
WineCellar.filter/3 함수를 확장해요. :country 옵션이 주어지면, 주어진 색상이면서 주어진 국가의 와인 리스트를 반환해야 해요.
이미 구현된 WineCellar.filter_by_country/2 함수를 사용해요. 이 함수는 와인 리스트와 국가를 인자로 받아, 주어진 국가의 와인 리스트를 반환해요.
:year와 :country 옵션이 순서에 상관없이 둘 다 주어졌을 때도 함수가 제대로 동작하는지 확인해요.
WineCellar.filter(
[
white: {"Chardonnay", 2015, "Italy"},
white: {"Pinot grigio", 2017, "Germany"},
red: {"Pinot noir", 2016, "France"},
rose: {"Dornfelder", 2018, "Germany"}
],
:white,
year: 2015,
country: "Germany"
)
# => []
Exercism에 가입하고 Elixir 트랙을 개념 58개연습 문제 168개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.