Track
/
Gleam
Gleam
/
Esercizi
/
Newsletter
Newsletter

Newsletter

Esercizio di apprendimento

Introduzione

Nil

In Gleam, Nil è un tipo con un unico valore, chiamato anch'esso Nil. È simile a void di altri linguaggi: si usa quando una funzione non ha un valore più adatto da restituire.

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

I valori in Gleam non sono «nil-able» o «nullable» come in alcuni altri linguaggi. Un valore può essere Nil solo se il suo tipo è Nil, e un valore di qualsiasi altro tipo non può mai essere Nil.

IO

Come la maggior parte dei linguaggi di programmazione, Gleam ha gli «effetti collaterali»: le funzioni possono leggere e cambiare lo stato del mondo, oltre a restituire un valore.

Il modulo gleam/io della libreria standard di Gleam fornisce funzioni per stampare stringhe sulla console.

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

Altri pacchetti possono fornire altre funzioni di IO, come simplifile, un pacchetto che fornisce funzioni per leggere e scrivere file.

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

Istruzioni

Boris è un grande appassionato di modellismo ferroviario e ha deciso di condividere la sua passione con il mondo avviando una newsletter. Comincerà inviando il primo numero della newsletter ad amici e conoscenti che condividono questo hobby. I loro indirizzi email sono salvati in un file di testo.

Suggerimento: usa il modulo simplifile per le operazioni sui file.

1. Leggi gli indirizzi email da un file

Implementa la funzione read_emails. Prende una stringa con il percorso di un file di testo che contiene indirizzi email separati da caratteri di nuova riga e restituisce un array con gli indirizzi email presenti nel file.

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

2. Crea un file di log per la scrittura

Inviare un'email è un'operazione che può fallire per molte ragioni imprevedibili, come un errore di battitura nell'indirizzo email o problemi temporanei di rete. Per poter ritentare l'invio delle email a tutti gli amici senza mandarne di duplicate, devi registrare gli indirizzi email che hanno già ricevuto il messaggio. Per farlo, ti serve un file di log.

Implementa la funzione create_log_file. Prende il percorso di un file e crea un nuovo file vuoto in quella posizione.

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

3. Registra un'email inviata

Implementa la funzione log_sent_email. Prende il percorso di un file di log e una stringa con l'indirizzo email. Scrive l'indirizzo email nel file, seguito da un carattere di nuova riga.

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

4. Invia la newsletter

Ora che hai tutti i mattoni della procedura di invio delle email, devi combinarli insieme in un'unica funzione.

Implementa la funzione send_newsletter. Prende il percorso del file con gli indirizzi email, il percorso di un file di log e una funzione anonima che invia un'email a un dato indirizzo email.

Dovrebbe leggere tutti gli indirizzi email dal file indicato e provare a inviare un'email a ciascuno di essi. Se la funzione anonima che invia l'email restituisce un valore Ok, scrivi l'indirizzo email nel file di log. Assicurati di farlo appena l'email è stata inviata.

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Gleam Exercism

Vuoi iniziare Newsletter?

Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.