Percursos
/
Gleam
Gleam
/
Exercícios
/
Boletim informativo
Boletim informativo

Boletim informativo

Exercício de aprendizagem

Introdução

Nil

Nil em Gleam é um tipo com um único valor, também chamado Nil. É semelhante ao void de outras linguagens, na medida em que é usado quando uma função não tem nenhum valor mais adequado para devolver.

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

Em Gleam, os valores não são "niláveis" nem "anuláveis", como acontece nalgumas outras linguagens. Um valor só pode ser Nil se o seu tipo for Nil, e um valor de qualquer outro tipo nunca pode ser Nil.

IO

Tal como a maioria das linguagens de programação, o Gleam tem "efeitos secundários", por isso uma função pode ler e alterar o estado do mundo, para além de devolver um valor.

O módulo gleam/io da biblioteca padrão de Gleam fornece funções para imprimir strings na consola.

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

Outros pacotes podem fornecer outras funções de IO, como o simplifile, um pacote que disponibiliza funções para ler e escrever ficheiros.

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

Instruções

O Boris é um grande apaixonado por comboios em miniatura e decidiu partilhar a sua paixão com o mundo, lançando uma newsletter. Começa por enviar o primeiro número da newsletter a amigos e conhecidos que partilham este passatempo; os respetivos endereços de email estão guardados num ficheiro de texto.

Dica: usa o módulo simplifile para as operações com ficheiros.

1. Ler endereços de email de um ficheiro

Implementa a função read_emails. Recebe uma string com o caminho para um ficheiro de texto que contém endereços de email separados por quebras de linha e devolve uma lista com os endereços de email do ficheiro.

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

2. Criar um ficheiro de registo para escrita

Enviar um email é uma tarefa que pode falhar por muitas razões imprevisíveis, como um erro de escrita no endereço de email ou problemas temporários de rede. Para garantires que consegues voltar a tentar enviar os emails a todos os teus amigos sem enviar duplicados, precisas de registar os endereços de email que já receberam o email. Para isso, vais precisar de um ficheiro de registo.

Implementa a função create_log_file. Recebe um caminho de ficheiro e cria um novo ficheiro vazio nesse local.

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

3. Registar um email enviado

Implementa a função log_sent_email. Recebe um caminho para um ficheiro de registo e uma string com o endereço de email. Escreve o endereço de email no ficheiro, 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 tens todas as peças do processo de envio de emails, precisas de as combinar numa única função.

Implementa a função send_newsletter. Recebe um caminho do ficheiro com os endereços de email, um caminho de um ficheiro de registo e uma função anónima que envia um email para um determinado endereço de email.

Deve ler todos os endereços de email do ficheiro indicado e tentar enviar um email a cada um deles. Se a função anónima que envia o email devolver um valor Ok, escreve o endereço de email no ficheiro de registo. Certifica-te de que o fazes assim que o email for enviado.

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
Editar via GitHub A ligação abre numa nova janela ou separador
Gleam Exercism

Estás pronto para começar Boletim informativo?

Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.