Closure
Funzioni anonime
Closure è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
Che cos'è una closure?
Una closure è una funzione anonima che è possibile memorizzare in una variabile e chiamare in seguito. Si scrive con barre verticali intorno ai parametri.
fn main() {
let add_one = |x| x + 1;
println!("{}", add_one(4));
}Sintassi delle closure
I parametri vengono inseriti tra |...|, seguiti dal corpo. Con una sola espressione non servono le parentesi graffe.
|x| x + 1— un parametro.|a, b| a + b— due parametri.
fn main() {
let multiply = |a, b| a * b;
println!("{}", multiply(3, 5));
}Closure su più righe
Per più di un'istruzione, racchiuda il corpo tra parentesi graffe, proprio come per una funzione.
fn main() {
let describe = |n: i32| {
let doubled = n * 2;
println!("{} doubled is {}", n, doubled);
};
describe(7);
}Acquisire l'ambiente
A differenza di una funzione normale, una closure può acquisire variabili dallo scope circostante e usarle al proprio interno.
fn main() {
let factor = 10;
let scale = |x| x * factor;
println!("{}", scale(5));
}Inferenza dei tipi nelle closure
Di solito le closure deducono i tipi dei parametri e del valore restituito dal modo in cui vengono usate, quindi le annotazioni sono facoltative.
Se necessario, può aggiungere i tipi per maggiore chiarezza.
fn main() {
let greet = |name: &str| -> String {
format!("Hello, {}!", name)
};
println!("{}", greet("Rust"));
}Closure come argomenti
Molti metodi della libreria standard accettano una closure. Ad esempio, map applica una closure a ogni elemento.
fn main() {
let nums = vec![1, 2, 3];
let doubled: Vec<i32> = nums.iter().map(|x| x * 2).collect();
println!("{:?}", doubled);
}Filtrare con le closure
Il metodo filter conserva solo gli elementi per i quali la closure restituisce true.
fn main() {
let nums = vec![1, 2, 3, 4, 5, 6];
let evens: Vec<i32> = nums.into_iter().filter(|x| x % 2 == 0).collect();
println!("{:?}", evens);
}Memorizzare le closure
Le closure hanno tipi anonimi univoci, ma è possibile memorizzarle in una variabile e riutilizzarle.
fn main() {
let is_even = |n: i32| n % 2 == 0;
println!("{} {}", is_even(4), is_even(7));
}Closure e funzioni a confronto
Differenze:
- Le funzioni non possono acquisire variabili circostanti; le closure sì.
- Le closure sono anonime e spesso brevi.
- I tipi delle closure vengono solitamente dedotti.
fn main() {
let base = 100;
let bonus = |earned: i32| earned + base;
println!("{}", bonus(25));
}Restituire valori calcolati
Combini le closure con gli iteratori per calcolare risultati tramite una pipeline chiara ed espressiva.
fn main() {
let nums = vec![10, 20, 30];
let total: i32 = nums.iter().map(|x| x + 1).sum();
println!("total {}", total);
}Le closure acquisiscono per riferimento
Per impostazione predefinita, una closure prende in prestito le variabili acquisite. È comunque possibile leggerle all'esterno in seguito, quando sono state solo prese in prestito.
fn main() {
let name = String::from("Ada");
let printer = || println!("Name: {}", name);
printer();
println!("still usable: {}", name);
}Verifica rapida
Ricordi una capacità fondamentale delle closure.
Riepilogo
Le closure in Rust:
- Funzioni anonime scritte come
|params| body. - Possono acquisire variabili dal proprio ambiente.
- I tipi vengono solitamente dedotti.
- Sono ampiamente usate con metodi degli iteratori come
mapefilter.
fn main() {
let tax = 0.2;
let with_tax = |price: f64| price * (1.0 + tax);
println!("{}", with_tax(50.0));
}Domande Frequenti
La lezione «Closure» è gratuita?
Sì — il testo completo di «Closure» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «Closure»?
Funzioni anonime Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Closure»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.