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

A diferencia de otros lenguajes, en Gleam los valores no pueden ser «nil» ni «nulos». 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 ficheros.

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

Instrucciones

Boris es un gran aficionado a los trenes en miniatura 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 la afición; sus direcciones de correo electrónico están guardadas en un fichero de texto.

Pista: usa el módulo simplifile para las operaciones con ficheros.

1. Lee direcciones de correo electrónico de un fichero

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

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

2. Crea un fichero de registro para escribir

Enviar un correo electrónico es una tarea que puede fallar por muchas razones imprevisibles, como un error tipográfico en la dirección de correo electrónico 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 ello, necesitarás un fichero de registro.

Implementa la función create_log_file. Recibe la ruta de un fichero y crea un fichero 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 a un fichero de registro y un string con la dirección de correo electrónico. Escribe la dirección de correo electrónico en el fichero, 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 proceso de envío de correos electrónicos, necesitas combinarlas en una sola función.

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

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

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 pestaña nueva
Gleam Exercism

¿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.