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.
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")
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.
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"])
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)
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)
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)
Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.