트랙
/
Elixir
Elixir
/
연습 문제
/
숫자 맞히기 게임
숫자 맞히기 게임

숫자 맞히기 게임

학습 연습 문제

소개

여러 절을 가진 함수

Elixir는 함수가 여러 개의 절을 가질 수 있게 해줘서 개방-폐쇄 원칙을 실천할 수 있어요. 그래서 길게 늘어지고 하드코딩된 제어 로직을 쓰는 대신, 동작을 쉽게 추가하거나 제거하는 목적에 맞는 함수를 작성할 수 있어요.

Elixir는 _여러 개의 함수 절_과 _가드_를 제공해서 다음과 같이 작성할 수 있어요:

def number(n) when n == 7 do
  "Awesome, that's my favorite"
end

def number(_n) do
  "That's not my favorite"
end

실행 시점에 Elixir는 소스 파일의 위에서 아래로 어떤 함수 절을 호출할지 검사해요.

사용하지 않는 변수에는 밑줄을 앞에 붙여야 해요.

가드

가드는 인자를 가드 함수로 평가한 결과에 따라 Elixir가 함수를 호출하는 것을 막는 데 사용해요. 가드는 when 키워드로 시작하고, 그 뒤에 불리언 식이 와요. 가드 함수는 다음과 같은 특별한 함수예요:

  • 순수해야 하고, 어떤 전역 상태도 변경하지 않아야 해요.
  • 엄격한 true 또는 false 값을 반환해야 해요.

자주 쓰이는 가드 목록은 Elixir 문서에서 볼 수 있어요. 여기에는 타입 검사, 기본 산술 연산, 비교, 그리고 엄격한 불리언 연산자가 포함돼요.

기본 인자

함수는 하나 이상의 인자에 기본값을 선언할 수 있어요. 다음 함수를 살펴봐요:

def number(n \\ 13), do: "That's not my favorite"

컴파일하면 Elixir는 number/0(인자 없음)과 number/1(인자 하나)에 대한 함수 정의를 만들어요.

인자가 둘 이상 기본값을 가지면, 기본값은 왼쪽에서 오른쪽 순서로 적용되어 빠진 인자를 채워요.

함수에 절이 둘 이상 있으면, 기본 인자는 함수 절보다 앞에 있는 함수 헤더(본문이 없는 함수)에서 정의해야 해요:

def number(n \\ 13)
def number(n) when n < 10, do: "Dream bigger!"
def number(n) when n > 100, do: "Not that big..."

지침

친구가 비밀 숫자를 맞혀 볼 수 있는 간단한 온라인 게임을 만들고 있어요. 어느 정도 피드백은 주고 싶지만, 추측만으로 정답을 알려 주고 싶지는 않아요. 추측이 비밀 숫자와 어떤 관계인지에 따라 서로 다른 응답을 돌려주는 함수를 만들어야 해요.

조건 응답
추측이 비밀 숫자와 일치할 때 "Correct"
추측이 비밀 숫자보다 하나 크거나 하나 작을 때 "So close"
추측이 비밀 숫자보다 클 때 "Too high"
추측이 비밀 숫자보다 작을 때 "Too low"
추측을 하지 않았을 때 "Make a guess"

모든 추측과 비밀 숫자는 정수예요.

1. 추측이 비밀 숫자와 일치할 때 응답 만들기

정수인 두 인자 secret_number와 guess를 받는 compare/2 함수를 구현해요.

GuessingGame.compare(5, 5)
# => "Correct"

2. 추측이 비밀 숫자보다 클 때 응답 만들기

compare 함수를 수정해서 비밀 숫자보다 큰 추측에도 응답하도록 해요.

GuessingGame.compare(5, 8)
# => "Too high"

3. 추측이 비밀 숫자보다 작을 때 응답 만들기

compare 함수를 수정해서 비밀 숫자보다 작은 추측에도 응답하도록 해요.

GuessingGame.compare(5, 2)
# => "Too low"

4. 추측이 비밀 숫자보다 하나 크거나 하나 작을 때 응답 만들기

compare 함수를 수정해서 비밀 숫자에 가까운 추측에도 응답하도록 해요.

GuessingGame.compare(5, 6)
# => "So close"
GuessingGame.compare(5, 4)
# => "So close"

5. 추측이 없을 때 응답 만들기

compare 함수를 수정해서 추측이 없을 때도 응답하도록 해요.

GuessingGame.compare(5)
# => "Make a guess"

GuessingGame.compare(5, :no_guess)
# => "Make a guess"
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Elixir Exercism

숫자 맞히기 게임 문제를 시작해 볼 준비가 됐나요?

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