Bienvenidos sean a este post, hoy hablaremos sobre los closures.
Los closures o cierres son funciones anonimas que se pueden almacenar en una variable o pasar como argumentos a otras funciones, esto nos permite crearlo en un lugar y despues llamarla para evaluarla en un contexto diferente, veamos como seria su sintaxis mas basica:
let variable_cierre = | <variable> | { instrucciones ...};
La primero sera una declaracion de variable como cualquier otro, pero despues tenemos una variable entre dos pipes (|), esta sera una variable que podremos utilizar unicamente dentro del bloque de instrucciones, veamos un ejemplo simple:
let agregar = | num | { num + 1 };
Pero esta variable es opcional siendo que los dos pipes son los que delimitan al closure, al igual que en otros casos tambien se puede definir el tipo de la variable, vamos a hacer un ejemplo simple para verlo en accion, para ello crearemos un nuevo proyecto que llamaremos cierre, una vez creado modificaremos el codigo generado en main.rs con el siguiente:
main.rs
use std::thread;
use std::time::Duration;
fn rutina_ejercicio(i: u32, a: u32)
{
let cierre = | num | {
println!("Recalculando...");
thread::sleep(Duration::from_secs(2));
num
};
if i < 25
{
println!("Hoy haz {} sentadillas",
cierre(i));
println!("Despues haz {} sentadillas",
cierre(i));
} else {
if a == 3
{
println!("Descansa un poco y recuerda hidratarte");
} else {
println!("Hoy corre por {} minutos",
cierre(i));
}
}
}
fn main()
{
let valor_especificado = 22;
let numero_al_azar = 5;
rutina_ejercicio(
valor_especificado,
numero_al_azar
);
}
Primero importaremos dos elementos, el primero sera para manipular un thread y el segundo es para establecer una duracion, ya veremos porque, despues definiremos una funcion que recibira dos valores, esta funcion sera para crear una rutina de ejercicio, lo primero que haremos dentro de esta funcion sera crear la siguiente variable:
let cierre = | num | {
println!("Recalculando...");
thread::sleep(Duration::from_secs(2));
num
};
Observen que primero definimos una variable para contener nuestro closure al cual llamaremos cierre, declaramos una llamada num, en este definiremos un bloque donde mostraremos un mensaje en pantalla donde por medio de thread usaremos a sleep para generar una pausa y esta durara la que pasemos con Duration, una vez terminado devolveremos el valor que pasamos a num, esto es el closure continuemos con el codigo.
Lo siguiente sera un condicional donde verificamos si el valor de i es menor que 25 donde mostraremos dos mensajes y en ambos casos usaremos el closure llamado cierre y le pasaremos el valor almacenado en i, luego tenemos un else donde chequeamos si el valor de la otra variable es igual a tres, en caso de ser verdadero le diremos que pare de lo contrario le pedimos que corra la cantidad de minutos proporcional al valor de a, solo nos resta hablar de main donde crearemos dos variables con valores distintos, los siguiente sera llamar a la funcion anterior con los valores creados, compilemos y veamos su salida mediante el siguiente video
Observen como a pesar de s ser una simple variable nos permite ejecutar al metodo sleep para poder generar una pequeña pausa y hacer el efecto de que esta demorando el calculo.
En resumen, hoy hemos visto que son los closures o cierres, como es su sintaxis, como se compone, para que nos puede servir a traves de un breve ejemplo y como aplicarlo, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
