Треки
/
Gleam
Gleam
/
Вправи
/
Розсилка
Розсилка

Розсилка

Навчальна вправа

Вступ

Nil

Nil у Gleam - це тип з єдиним значенням, яке теж називається Nil. Він схожий на void в інших мовах тим, що його використовують, коли функції немає іншого, доречнішого значення для повернення.

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

Значення в Gleam не бувають «nil-able» чи «nullable», як у деяких інших мовах. Значення може бути Nil, лише якщо його тип - Nil, а значення будь-якого іншого типу ніколи не буває Nil.

IO

Як і більшість мов програмування, Gleam має «побічні ефекти», тож функції можуть читати стан світу й змінювати його, а також повертати значення.

Модуль gleam/io зі стандартної бібліотеки Gleam надає функції для виведення рядків тексту (англ. string) у консоль.

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

Інші пакети можуть надавати інші функції введення-виведення, як-от simplifile, пакет із функціями для читання й запису файлів.

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

Вказівки

Борис дуже захоплюється модельними залізницями і вирішив поділитися своєю пристрастю зі світом, започаткувавши розсилку. Він почне з того, що надішле перший випуск розсилки друзям і знайомим, які поділяють це захоплення. Їхні адреси електронної пошти зберігаються в текстовому файлі.

Підказка: скористайтеся модулем simplifile для операцій із файлами.

1. Зчитуємо адреси електронної пошти з файлу

Реалізуйте функцію read_emails. Вона приймає рядок тексту (англ. string) зі шляхом до текстового файлу, який містить адреси електронної пошти, розділені символами нового рядка, і повертає масив адрес електронної пошти з цього файлу.

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 вправи та справжнє наставництво від людей, і все це безкоштовно.