Newsletter

Newsletter

Exercice d'apprentissage

Introduction

Nil

Nil est en Gleam un type qui ne comporte qu'une seule valeur, elle aussi appelée Nil. Il est semblable à void dans d'autres langages, en ce sens qu'on l'utilise quand une fonction n'a pas de valeur plus pertinente à renvoyer.

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

En Gleam, les valeurs ne sont pas « nil-ables » ou « nullables » comme dans certains autres langages. Une valeur ne peut être Nil que si son type est Nil, et une valeur de tout autre type ne peut jamais être Nil.

IO

Comme la plupart des langages de programmation, Gleam a des « effets de bord », ce qui signifie que les fonctions peuvent lire et modifier l'état du monde, tout en renvoyant une valeur.

Le module gleam/io de la bibliothèque standard de Gleam fournit des fonctions pour afficher des strings dans la console.

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

D'autres paquets peuvent fournir d'autres fonctions d'entrée-sortie, comme simplifile, un paquet qui propose des fonctions pour lire et écrire des fichiers.

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

Instructions

Boris est un grand passionné de trains miniatures et a décidé de partager sa passion avec le monde en lançant une newsletter. Il commencera par envoyer le premier numéro de la newsletter à ses amis et connaissances qui partagent cette passion ; leurs adresses e-mail sont stockées dans un fichier texte.

Astuce : Utilise le module simplifile pour les opérations sur les fichiers.

1. Lis les adresses e-mail depuis un fichier

Implémente la fonction read_emails. Elle prend une string contenant le chemin vers un fichier texte qui contient des adresses e-mail séparées par des retours à la ligne, et renvoie un tableau des adresses e-mail du fichier.

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

2. Crée un fichier journal pour l'écriture

Envoyer un e-mail est une tâche qui peut échouer pour de nombreuses raisons imprévisibles, comme une faute de frappe dans l'adresse e-mail ou des problèmes de réseau temporaires. Pour pouvoir réessayer d'envoyer les e-mails à tous tes amis sans envoyer de doublons, tu dois consigner les adresses e-mail qui ont déjà reçu l'e-mail. Pour cela, il te faut un fichier journal.

Implémente la fonction create_log_file. Elle prend un chemin de fichier et crée un nouveau fichier vide à cet emplacement.

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

3. Consigne un e-mail envoyé

Implémente la fonction log_sent_email. Elle prend un chemin vers un fichier journal et une string contenant l'adresse e-mail. Elle écrit l'adresse e-mail dans le fichier, suivie d'un retour à la ligne.

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

4. Envoie la newsletter

Maintenant que tu as toutes les briques de la procédure d'envoi d'e-mails, tu dois les assembler dans une seule fonction.

Implémente la fonction send_newsletter. Elle prend un chemin du fichier contenant les adresses e-mail, un chemin d'un fichier journal, et une fonction anonyme qui envoie un e-mail à une adresse e-mail donnée.

Elle doit lire toutes les adresses e-mail du fichier donné et tenter d'envoyer un e-mail à chacune d'elles. Si la fonction anonyme qui envoie l'e-mail renvoie une valeur Ok, écris l'adresse e-mail dans le fichier journal. Veille à le faire dès que l'e-mail est envoyé.

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Gleam Exercism

Prêt à commencer Newsletter ?

Inscris-toi sur Exercism pour apprendre et maîtriser Gleam avec 33 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.