Nil no Gleam é um tipo com um único valor, também chamado Nil. É parecido com void em outras linguagens: é usado quando uma função não tem um valor mais adequado para retornar.
io.println("Hello, Joe!")
// -> Nil
Em Gleam, os valores não são "nil-able" nem "nullable" como em algumas outras linguagens. Um valor só pode ser Nil se o tipo dele for Nil, e um valor de qualquer outro tipo nunca pode ser Nil.
Como a maioria das linguagens de programação, o Gleam tem "efeitos colaterais", então as funções podem ler e mudar o estado do mundo, além de retornar um valor.
O módulo gleam/io da biblioteca padrão do Gleam fornece funções para imprimir strings no console.
io.println("Hello, Joe!")
// Hello, Joe!
// -> Nil
Outros pacotes podem fornecer outras funções de IO, como o simplifile, um pacote que fornece funções para ler e escrever arquivos.
simplifile.read("favourite-colour.txt")
// -> Ok("Pink\n")
Boris é um grande entusiasta de trens de modelismo e decidiu compartilhar essa paixão com o mundo lançando uma newsletter. A ideia é começar enviando a primeira edição para amigos e conhecidos que compartilham o hobby; os endereços de e-mail deles estão guardados em um arquivo de texto.
Dica: use o módulo simplifile para as operações com arquivos.
Implemente a função read_emails. Ela recebe uma string com o caminho de um arquivo de texto que contém endereços de e-mail separados por quebras de linha e retorna uma lista com os endereços de e-mail do arquivo.
read_emails("/home/my_user/documents/model_train_friends_emails.txt")
// -> Ok(["rick@example.com", "choochoo42@example.com", "anna@example.com"])
Enviar um e-mail é uma tarefa que pode falhar por muitos motivos imprevisíveis, como um erro de digitação no endereço de e-mail ou problemas temporários de rede. Para garantir que você possa tentar reenviar os e-mails a todos os seus amigos sem enviar duplicatas, é preciso registrar os endereços de e-mail que já receberam a mensagem. Para isso, você vai precisar de um arquivo de log.
Implemente a função create_log_file. Ela recebe um caminho de arquivo e cria um novo arquivo vazio nesse local.
create_log_file("/home/my_user/documents/newsletter_issue1_log.txt")
// -> Ok(Nil)
Implemente a função log_sent_email. Ela recebe o caminho de um arquivo de log e uma string com o endereço de e-mail. Ela escreve o endereço de e-mail no arquivo, seguido de uma quebra de linha.
log_sent_email(
"/home/my_user/documents/newsletter_issue1_log.txt",
"joe@example.com",
)
// -> Ok(Nil)
Agora que você tem todas as peças do processo de envio de e-mails, precisa juntá-las em uma única função.
Implemente a função send_newsletter. Ela recebe o caminho do arquivo com os endereços de e-mail, o caminho de um arquivo de log e uma função anônima que envia um e-mail para um determinado endereço de e-mail.
Ela deve ler todos os endereços de e-mail do arquivo fornecido e tentar enviar um e-mail para cada um deles. Se a função anônima que envia o e-mail retornar um valor Ok, escreva o endereço de e-mail no arquivo de log. Certifique-se de fazer isso assim que o e-mail for enviado.
send_newsletter(
"model_train_friends_emails.txt",
"newsletter_issue1_log.txt",
send_email,
)
// -> Ok(Nil)
Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.