트랙
/
Gleam
Gleam
/
연습 문제
/
봄맞이 대청소
봄맞이 대청소

봄맞이 대청소

학습 연습 문제

소개

let assert

Gleam에서 값에 대한 패턴 매칭을 할 때에는 패턴이 그 타입의 모든 가능한 값을 처리하도록 해야 해요. 그렇지 않으면 코드가 컴파일되지 않아요.

이 함수는 배열이 비어 있는 경우를 처리하지 않았기 때문에 거부돼요:

pub fn get_first_element_or_crash(items: List(e)) -> e {
  case items {
    [item, ..] -> item
  }
}

대부분의 Gleam 프로그램에서는 모든 가능한 경우를 처리하고 싶어 해요. 하지만 프로토타입이나 간단한 스크립트처럼 정상 경로에만 집중하고 나머지 경우에 대한 코드는 작성하지 않고 싶을 때도 있어요. 이럴 때 사용하는 것이 바로 Gleam의 let assert이에요.

let assert를 사용하면 패턴이 타입의 가능한 값 중 일부만 처리할 수 있어요. 그리고 패턴이 값과 일치하지 않으면 프로그램이 중단돼요. let assert를 사용하면 위 함수를 이렇게 작성할 수 있어요:

pub fn get_first_element_or_crash(items: List(e)) -> e {
  let assert [item, ..] = items
  item
}

Gleam 라이브러리에서는 프로그램을 중단시킬 수 있으므로 let assert를 절대 사용하면 안 돼요. 대신 Result 타입을 사용해서 애플리케이션 개발자가 오류를 어떻게 처리할지 결정하도록 해야 해요.

지침

이벤트 기획자 Mika는 회사에서 승진을 했고, 새로 맡은 업무의 하나로 이벤트 데이터베이스를 관리하게 되었어요. 그런데 데이터 상당수가 다루기 어려운 방식으로 저장되어 있다는 걸 금방 알아차렸죠. 그래서 Mika와 함께 일회성 스크립트로 데이터를 정리해 보기로 해요.

스크립트는 딱 한 번만 실행할 예정이고 데이터 구조도 확실히 파악하고 있으니, 이럴 때는 Gleam의 _let assertions_을 쓰기 좋은 상황이라고 생각해요.

1. 오류 추출하기

지난 이벤트마다 그 이벤트 중에 발생한 문제 목록이 있어요. 이것들은 결과로 저장되어 있지만, 항상 Error 배리언트예요.

항상 Error일 것으로 예상되는 결과를 받아, 그 안에 담긴 오류 값을 반환하는 extract_error 함수를 구현해요.

extract_error(Error("Not enough coffee"))
// -> "Not enough coffee"

2. 팀 접두사 제거하기

팀 이름 앞에는 "Team "이라는 단어가 붙어 있지만, 이건 필요하지 않아요. 팀 이름에서 이 접두사를 제거하는 remove_team_prefix 함수를 구현해요.

remove_team_prefix("Team Turtle")
// -> "Turtle"

3. 지역과 팀 나누기

각 이벤트는 팀이 진행하고, 각 팀은 지역에 속해 있어요. 데이터베이스에서는 이 둘이 쉼표로 구분되어 하나의 문자열로 저장되어 있어요.

문자열을 지역과 팀을 각각 담은 두 문자열의 튜플로 나누는 split_region_and_team 함수를 구현해요. 팀 이름에서는 "Team " 접두사를 제거해야 해요.

split_region_and_team("East,Team Orange")
// -> #("East", "Orange")
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Gleam Exercism

봄맞이 대청소 문제를 시작해 볼 준비가 됐나요?

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