트랙
/
Gleam
Gleam
/
연습 문제
/
뉴스레터
뉴스레터

뉴스레터

학습 연습 문제

소개

Nil

Gleam의 Nil은 값이 하나뿐인 타입이고, 그 값의 이름도 Nil이에요. 다른 언어의 void와 비슷하게, 함수가 반환할 만한 더 적절한 값이 없을 때 사용해요.

io.println("Hello, Joe!")
// -> Nil

Gleam의 값은 다른 언어에서처럼 "nil이 될 수 있거나" "null을 허용하는" 값이 아니에요. 값의 타입이 Nil일 때만 그 값이 Nil일 수 있고, 다른 타입의 값은 절대 Nil이 될 수 없어요.

IO

대부분의 프로그래밍 언어처럼 Gleam에도 "부수 효과"가 있어요. 그래서 함수는 값을 반환할 뿐만 아니라 세상의 상태를 읽고 바꿀 수도 있어요.

Gleam 표준 라이브러리의 gleam/io 모듈은 문자열을 콘솔에 출력하는 함수를 제공해요.

io.println("Hello, Joe!")
// Hello, Joe!
// -> Nil

다른 패키지에서 다른 IO 함수를 제공하기도 해요. 예를 들어 simplifile은 파일을 읽고 쓰는 함수를 제공하는 패키지예요.

simplifile.read("favourite-colour.txt")
// -> Ok("Pink\n")

지침

보리스는 모형 기차를 아주 좋아해서, 자신의 열정을 세상과 나누기 위해 뉴스레터를 시작하기로 했어요. 먼저 같은 취미를 가진 친구와 지인들에게 뉴스레터 첫 번째 호를 보낼 거예요. 그들의 이메일 주소는 텍스트 파일에 저장되어 있어요.

힌트: 파일 작업에는 simplifile 모듈을 사용해요.

1. 파일에서 이메일 주소 읽기

read_emails 함수를 구현해요. 이 함수는 줄바꿈으로 구분된 이메일 주소가 들어 있는 텍스트 파일의 경로 문자열을 받아서, 파일에서 읽은 이메일 주소의 배열을 반환해요.

read_emails("/home/my_user/documents/model_train_friends_emails.txt")
// -> Ok(["rick@example.com", "choochoo42@example.com", "anna@example.com"])

2. 기록용 로그 파일 만들기

이메일을 보내는 일은 이메일 주소의 오타나 일시적인 네트워크 문제처럼 예측할 수 없는 여러 이유로 실패할 수 있어요. 중복으로 보내지 않고 친구들에게 이메일을 다시 보낼 수 있으려면, 이미 이메일을 받은 주소를 기록해 두어야 해요. 이를 위해 로그 파일이 필요해요.

create_log_file 함수를 구현해요. 이 함수는 파일 경로를 받아서 그 위치에 비어 있는 새 파일을 만들어요.

create_log_file("/home/my_user/documents/newsletter_issue1_log.txt")
// -> Ok(Nil)

3. 보낸 이메일 기록하기

log_sent_email 함수를 구현해요. 이 함수는 로그 파일의 경로와 이메일 주소가 담긴 문자열을 받아요. 파일에 이메일 주소를 쓰고, 그다음에 줄바꿈을 써요.

log_sent_email(
  "/home/my_user/documents/newsletter_issue1_log.txt",
  "joe@example.com",
)
// -> Ok(Nil)

4. 뉴스레터 보내기

이제 이메일을 보내는 절차의 모든 구성 요소를 갖췄으니, 이들을 하나의 함수로 합쳐야 해요.

send_newsletter 함수를 구현해요. 이 함수는 이메일 주소가 들어 있는 파일의 경로, 로그 파일의 경로, 그리고 주어진 이메일 주소로 이메일을 보내는 익명 함수를 받아요.

주어진 파일에서 모든 이메일 주소를 읽고, 각 주소로 이메일을 보내 봐야 해요. 이메일을 보내는 익명 함수가 Ok 값을 반환하면, 그 이메일 주소를 로그 파일에 기록해요. 이메일을 보내자마자 바로 기록해야 해요.

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
GitHub에서 편집 링크가 새 창이나 탭에서 열려요
Gleam Exercism

뉴스레터 문제를 시작해 볼 준비가 됐나요?

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