Boletín

Boletín

Ejercicio de aprendizaje

Introducción

Nil

Nil en Gleam es un tipo con un único valor, que también se llama Nil. Es similar a void en otros lenguajes, en el sentido de que se usa cuando una función no tiene un valor más adecuado que devolver.

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

Los valores en Gleam no son «nilables» ni «anulables» como en algunos otros lenguajes. Un valor solo puede ser Nil si su tipo es Nil, y un valor de cualquier otro tipo nunca puede ser Nil.

IO

Como la mayoría de los lenguajes de programación, Gleam tiene «efectos secundarios», así que las funciones pueden leer y cambiar el estado del mundo, además de devolver un valor.

El módulo gleam/io de la biblioteca estándar de Gleam proporciona funciones para imprimir strings en la consola.

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

Otros paquetes pueden proporcionar otras funciones de IO, como simplifile, un paquete que proporciona funciones para leer y escribir archivos.

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

Instrucciones

Boris es un gran aficionado a los trenes a escala y ha decidido compartir su pasión con el mundo lanzando un boletín. Empezará enviando el primer número del boletín a amigos y conocidos que comparten este pasatiempo; sus direcciones de correo electrónico están guardadas en un archivo de texto.

Sugerencia: usa el módulo simplifile para las operaciones con archivos.

1. Lee las direcciones de correo electrónico de un archivo

Implementa la función read_emails. Recibe una cadena con la ruta a un archivo de texto que contiene direcciones de correo electrónico separadas por saltos de línea, y devuelve una lista con las direcciones de correo electrónico del archivo.

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

2. Crea un archivo de registro en el que escribir

Enviar un correo electrónico es una tarea que puede fallar por muchas razones impredecibles, como un error tipográfico en la dirección de correo o problemas temporales de red. Para asegurarte de que puedes reintentar el envío de los correos a todos tus amigos sin enviar duplicados, necesitas registrar las direcciones de correo electrónico que ya recibieron el correo. Para esto, necesitarás un archivo de registro.

Implementa la función create_log_file. Recibe una ruta de archivo y crea un archivo nuevo y vacío en esa ubicación.

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

3. Registra un correo enviado

Implementa la función log_sent_email. Recibe la ruta de un archivo de registro y una cadena con la dirección de correo electrónico. Escribe la dirección de correo electrónico en el archivo, seguida de un salto de línea.

log_sent_email(
  "/home/my_user/documents/newsletter_issue1_log.txt",
  "joe@example.com",
)
// -> Ok(Nil)

4. Envía el boletín

Ahora que tienes todas las piezas del procedimiento de envío de correos, necesitas combinarlas en una sola función.

Implementa la función send_newsletter. Recibe la ruta del archivo con las direcciones de correo electrónico, la ruta de un archivo de registro y una función anónima que envía un correo a una dirección de correo electrónico dada.

Debe leer todas las direcciones de correo electrónico del archivo dado e intentar enviar un correo a cada una de ellas. Si la función anónima que envía el correo devuelve un valor Ok, escribe la dirección de correo electrónico en el archivo de registro. Asegúrate de hacerlo en cuanto se envíe el correo.

send_newsletter(
  "model_train_friends_emails.txt",
  "newsletter_issue1_log.txt",
  send_email,
)
// -> Ok(Nil)
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Gleam Exercism

¿Todo listo para empezar Boletín?

Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.