Trilhas
/
Gleam
Gleam
/
Exercícios
/
Boletim informativo
Boletim informativo

Boletim informativo

Exercício de aprendizagem

Introdução

Nil

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.

IO

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")

Instruções

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.

1. Ler endereços de e-mail de um arquivo

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"])

2. Criar um arquivo de log para escrita

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)

3. Registrar um e-mail enviado

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)

4. Enviar a newsletter

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)
Editar via GitHub O link abre em uma nova janela ou aba
Gleam Exercism

Tudo pronto para começar Boletim informativo?

Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.