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