트랙
/
Gleam
Gleam
/
연습 문제
/
와인 저장고
와인 저장고

와인 저장고

학습 연습 문제

소개

레이블 인자

함수가 인자를 많이 받다 보면, 인자를 어떤 순서로 넘겨야 하는지 기억하기 어려울 때가 있어요. 그래서 Gleam에서는 가독성을 높이기 위해 인자에 이름을 붙일 수 있게 해줘요.

인자에 레이블을 붙이려면 인자 이름 앞에 레이블 이름을 쓰고, 둘 사이를 공백으로 구분해요.

pub fn replace(
  in string: String,
  each target: String,
  with replacement: String
) -> String {
  // ...
}

레이블 인자가 있는 함수를 호출할 때에는 인자를 어떤 순서로 넘겨도 돼요. 다음 replace 호출은 모두 같은 의미예요:

replace(in: "🍔🍔🍔", each: "🍔", with: "🍕")

replace(each: "🍔", in: "🍔🍔🍔", with: "🍕")

replace(with: "🍕", each: "🍔", in: "🍔🍔🍔")

레이블은 언제나 선택 사항이에요. 함수에 레이블 인자가 있더라도 레이블 없이 호출할 수 있어요.

replace("🍔🍔🍔", "🍔", "🍕")

지침

여러분은 규모가 꽤 큰 와인 저장고를 갖춘 고급 레스토랑에서 매니저로 일하고 있어요. 손님 중에는 까다로운 와인 애호가가 많아요. 특정 손님에게 꼭 맞는 와인 한 병을 고르는 일은 쉽지 않아요.

기술에 밝은 레스토랑 사장답게, 손님이 취향에 따라 와인을 걸러 볼 수 있는 앱을 만들어 와인 선택 과정의 속도를 높이기로 했어요.

1. 주어진 색상의 와인 모두 가져오기

와인 한 병은 사용자 정의 타입으로 표현하고, 와인은 배열에 저장해요.

[
  Wine("Chardonnay", 2015, "Italy", White),
  Wine("Pinot grigio", 2017, "Germany", White),
  Wine("Pinot noir", 2016, "France", Red),
  Wine("Dornfelder", 2018, "Germany", Rose)
]

wines_of_color 함수를 구현해요. 와인 배열을 받아 주어진 색상의 와인을 모두 반환해야 해요.

wines_of_color(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  color: White
)
// -> [
//   Wine("Chardonnay", 2015, "Italy", White),
//   Wine("Pinot grigio", 2017, "Germany", White),
// ]

2. 주어진 국가의 와인 모두 가져오기

wines_from_country 함수를 구현해요. 와인 배열과 국가를 받아, 주어진 국가에서 생산된 와인을 모두 반환해야 해요.

wines_from_country(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  country: "Germany"
)
// -> [
//   Wine("Dornfelder", 2018, "Germany", Rose)
// ]

3. 주어진 국가에서 생산된 주어진 색상의 와인 모두 가져오기

filter 함수를 구현해요. 와인 배열, 색상, 국가를 받아 주어진 국가에서 생산된 주어진 색상의 와인을 모두 반환해야 해요.

filter(
  [
    Wine("Chardonnay", 2015, "Italy", White),
    Wine("Pinot grigio", 2017, "Germany", White),
    Wine("Pinot noir", 2016, "France", Red),
    Wine("Dornfelder", 2018, "Germany", Rose)
  ],
  color: White
  country: "Italy"
)
// -> [
//   Wine("Chardonnay", 2015, "Italy", White),
// ]
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Gleam Exercism

와인 저장고 문제를 시작해 볼 준비가 됐나요?

Exercism에 가입하고 Gleam 트랙을 개념 33개연습 문제 122개, 그리고 실제 사람의 멘토링과 함께 배우고 익혀 보세요. 모두 무료예요.