Rust de los fundamentos al dominio — Lección 6
Procesamiento de datos con colecciones, iteradores y cierres.
Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.
Las colecciones estándar de Rust poseen los valores que almacenan. Los iteradores diferencian por tipo la forma en que se lee, toma prestada o consume una colección.
Vec y HashMap
use std::collections::HashMap;
let mut party = Vec::new();
party.push(String::from("Rose"));
let mut items = HashMap::new();
items.insert(10, String::from("Potion"));
if let Some(name) = items.get(&10) {
println!("{name}");
}
Vec es una lista ordenada y HashMap busca valores por clave. Como es posible que get no tenga un valor, devuelve Opción.
El verificador de préstamos evita que se conserven las referencias de elementos internos mientras se reasigna o modifica la colección.
Método de propiedad del iterador.
for name in &party {
println!("{name}");
}
for name in &mut party {
name.push_str("_01");
}
&party toma prestado el elemento de forma inmutable y &mut party lo toma prestado de forma mutable. Si la propia parte se repite como valor, la propiedad del elemento se mueve y el original no se puede utilizar más adelante.
Iteradores y cierres
let mut alive: Vec<&Monster> = monsters
.iter()
.filter(|monster| monster.health > 0)
.collect();
alive.sort_by_key(|monster| monster.health);
iter crea un iterador que toma prestados elementos y el filtro pasa solo valores que cumplen las condiciones. La colección final se crea cuando se llama a Collect.
let bonus = 5;
let add_bonus = |damage: i32| damage + bonus;
Los cierres se pueden capturar tomando prestado o moviendo los valores circundantes. Si el cierre debe sobrevivir a su alcance original, debe verificar si se necesita move y adónde va la propiedad.
El código iterador no se utiliza necesariamente porque es rápido. La ventaja es que la intención de los filtros y las transformaciones se puede expresar en etapas manteniendo los métodos de propiedad y préstamo.