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.
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")
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.
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"])
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)
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)
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)
Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.