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.
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")
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.
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"])
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)
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)
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)
Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.