Nil ist in Gleam ein Typ mit einem einzigen Wert, der ebenfalls Nil heißt. Er ähnelt void in anderen Sprachen insofern, als er verwendet wird, wenn eine Funktion keinen passenderen Wert zurückzugeben hat.
io.println("Hello, Joe!")
// -> Nil
Werte in Gleam sind nicht „nil-able“ oder „nullable“ wie in manchen anderen Sprachen. Ein Wert kann nur dann Nil sein, wenn sein Typ Nil ist, und ein Wert jeden anderen Typs kann niemals Nil sein.
Wie die meisten Programmiersprachen hat Gleam „Seiteneffekte“, sodass Funktionen den Zustand der Welt lesen und ändern können und außerdem einen Wert zurückgeben.
Das Modul gleam/io in der Gleam-Standardbibliothek bietet Funktionen zum Ausgeben von Strings auf der Konsole.
io.println("Hello, Joe!")
// Hello, Joe!
// -> Nil
Andere Pakete können weitere IO-Funktionen bereitstellen, etwa simplifile, ein Paket mit Funktionen zum Lesen und Schreiben von Dateien.
simplifile.read("favourite-colour.txt")
// -> Ok("Pink\n")
Boris ist ein großer Modelleisenbahn-Fan und hat beschlossen, seine Leidenschaft mit der Welt zu teilen, indem er einen Newsletter startet. Zuerst schickt er die erste Ausgabe des Newsletters an Freunde und Bekannte, die das Hobby teilen. Ihre E-Mail-Adressen sind in einer Textdatei gespeichert.
Hinweis: Verwende das simplifile-Modul für Dateioperationen.
Implementiere die Funktion read_emails. Sie nimmt einen String mit dem Pfad zu einer Textdatei, die durch Zeilenumbrüche getrennte E-Mail-Adressen enthält, und gibt eine Liste der E-Mail-Adressen aus der Datei zurück.
read_emails("/home/my_user/documents/model_train_friends_emails.txt")
// -> Ok(["rick@example.com", "choochoo42@example.com", "anna@example.com"])
Das Senden einer E-Mail ist eine Aufgabe, die aus vielen unvorhersehbaren Gründen fehlschlagen kann, zum Beispiel wegen eines Tippfehlers in der E-Mail-Adresse oder wegen temporärer Netzwerkprobleme. Damit du das Senden der E-Mails an alle deine Freunde wiederholen kannst, ohne Duplikate zu verschicken, musst du die E-Mail-Adressen protokollieren, die die E-Mail bereits erhalten haben. Dafür brauchst du eine Logdatei.
Implementiere die Funktion create_log_file. Sie nimmt einen Dateipfad und erstellt an dieser Stelle eine neue leere Datei.
create_log_file("/home/my_user/documents/newsletter_issue1_log.txt")
// -> Ok(Nil)
Implementiere die Funktion log_sent_email. Sie nimmt einen Pfad zu einer Logdatei und einen String mit der E-Mail-Adresse. Sie schreibt die E-Mail-Adresse, gefolgt von einem Zeilenumbruch, in die Datei.
log_sent_email(
"/home/my_user/documents/newsletter_issue1_log.txt",
"joe@example.com",
)
// -> Ok(Nil)
Jetzt, wo du alle Bausteine für das Versenden der E-Mails beisammen hast, musst du sie in einer einzigen Funktion kombinieren.
Implementiere die Funktion send_newsletter. Sie nimmt einen Pfad der Datei mit den E-Mail-Adressen, einen Pfad einer Logdatei und eine anonyme Funktion, die eine E-Mail an eine gegebene E-Mail-Adresse sendet.
Sie sollte alle E-Mail-Adressen aus der angegebenen Datei lesen und versuchen, an jede einzelne davon eine E-Mail zu senden. Wenn die anonyme Funktion, die die E-Mail sendet, einen Ok-Wert zurückgibt, schreibe die E-Mail-Adresse in die Logdatei. Achte darauf, das zu tun, sobald die E-Mail gesendet wurde.
send_newsletter(
"model_train_friends_emails.txt",
"newsletter_issue1_log.txt",
send_email,
)
// -> Ok(Nil)
Melde dich bei Exercism an, um Gleam mit 33 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.