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.
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")
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.
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"])
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)
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)
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)
Inscris-toi sur Exercism pour apprendre et maîtriser Gleam avec 33 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.