Volver a la página principal
miércoles 11 septiembre 2024
11

Cómo usar un closure en Rust

Un closure en Rust es una función anónima que puede capturar variables de su entorno. A diferencia de las funciones regulares, los closures pueden acceder a variables que están fuera de su propio alcance, lo que los hace muy útiles para ciertas tareas como operaciones en colecciones o programación funcional.

La sintaxis básica de un closure es:

let closure = |parametros| {
    // cuerpo del closure
};

Los closures pueden capturar variables de tres formas:

1. Por referencia: Acceden a la variable sin tomar propiedad de ella.

2. Por muta referencia: Modifican la variable original.

3. Por valor: Toman posesión de la variable.

Ejemplo básico de un closure

let sumar = |a, b| a + b;
println!("{}", sumar(2, 3)); // Imprime 5

En este ejemplo, sumar es un closure que toma dos parámetros y retorna la suma de ambos.

Ejemplos de uso de closures

1. Capturar variables del entorno

Un closure puede capturar variables que están fuera de su propio alcance:

let x = 5;
let sumar_x = |y| y + x; // Captura la variable `x` del entorno
println!("{}", sumar_x(3)); // Imprime 8

2. Usar closures con iteradores

Los closures son muy útiles con métodos como map, filter y for_each en iteradores:

let numeros = vec![1, 2, 3, 4];
let numeros_doblados: Vec<i32> = numeros.iter().map(|x| x * 2).collect();
println!("{:?}", numeros_doblados); // Imprime [2, 4, 6, 8]

3. Closure mutable

Un closure puede modificar variables capturadas si se define como mutable:

let mut contador = 0;
let mut incrementar = || {
    contador += 1;
    println!("Contador: {}", contador);
};

incrementar(); // Imprime "Contador: 1"
incrementar(); // Imprime "Contador: 2"

4. Closures que consumen variables

Un closure puede tomar posesión de una variable y consumirla:

let saludo = String::from("Hola");
let consumir = || {
    println!("{}", saludo);
}; // El closure toma posesión de `saludo`
consumir();
// `saludo` ya no puede ser usado aquí

Referencia oficial

Para más detalles sobre cómo usar closures en Rust, visita la documentación oficial de Rust.

Etiquetas:
rust
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer