Promemoria Rust (cheat sheet)
Una pagina da consultare al volo, per le cose che vuoi ricontrollare senza rileggere un’intera lezione. Ogni sezione rimanda alla pagina che le spiega per bene.
Parole chiave
Sezione intitolata “Parole chiave”| Parola chiave | Significato |
|---|---|
let |
Dichiara una variabile (Variabili) |
mut |
Rende mutabile una variabile o un riferimento (Variabili) |
const |
Dichiara una costante (Variabili) |
fn |
Dichiara una funzione (Funzioni) |
struct |
Dichiara una struct (Struct) |
enum |
Dichiara un enum (Enum) |
impl |
Aggiunge metodi a un tipo (Struct, Trait) |
trait |
Dichiara un trait (Trait) |
match |
Fa pattern matching su un valore (Match) |
if let / while let |
Confronta con un solo pattern (If let / while let) |
loop / while / for |
I tre tipi di ciclo (Cicli, While, For) |
break / continue |
Controllano un ciclo (Break/continue) |
mod |
Dichiara un modulo (Moduli) |
pub |
Rende un elemento pubblico fuori dal suo modulo (Moduli) |
use |
Porta un percorso nello scope (Moduli) |
unsafe |
Sblocca i puntatori grezzi e altre operazioni che controlli tu (Unsafe) |
move |
Costringe una closure a prendere l’ownership dei valori catturati (Concorrenza) |
& / &mut |
Prende in prestito un valore / lo prende in prestito in modo mutabile (Prestito) |
Metodi comuni di String
Sezione intitolata “Metodi comuni di String”| Metodo | Cosa fa |
|---|---|
.len() |
Lunghezza in byte |
.trim() |
Toglie gli spazi all’inizio e alla fine |
.to_uppercase() / .to_lowercase() |
Converte in maiuscolo / minuscolo |
.contains(pat) |
Dice se una sottostringa o un pattern è presente |
.replace(from, to) |
Sostituisce tutte le occorrenze |
.push_str(s) |
Aggiunge in fondo un &str |
.push(c) |
Aggiunge in fondo un singolo char |
.chars() |
Scorre la stringa carattere per carattere |
.split(pat) |
Divide in un iteratore di sottostringhe |
.parse::<T>() |
Converte il testo in un altro tipo (restituisce un Result) |
Trovi dettagli ed esempi nella pagina Stringhe.
Metodi comuni di Vec
Sezione intitolata “Metodi comuni di Vec”| Metodo | Cosa fa |
|---|---|
.push(x) |
Aggiunge in fondo |
.pop() |
Toglie e restituisce l’ultimo elemento (Option) |
.remove(i) |
Toglie l’elemento all’indice i |
.len() |
Numero di elementi |
.is_empty() |
Dice se il vettore è vuoto |
.get(i) |
Accesso sicuro per indice (Option, niente panic) |
.iter() |
Scorre gli elementi per riferimento |
.contains(&x) |
Dice se un valore è presente |
.sort() |
Ordina sul posto |
.sort_by_key(|x| ...) |
Ordina per un campo o una chiave calcolata |
.dedup() |
Toglie i duplicati consecutivi (ordina prima) |
Trovi dettagli ed esempi nelle pagine Vettori, Ordinamento e ricerca e Iteratori.
Quale collezione devo usare?
Sezione intitolata “Quale collezione devo usare?”| Tipo | Usalo quando ti serve… |
|---|---|
Vec<T> |
Una lista ordinata che può crescere |
HashMap<K, V> |
Trovare velocemente un valore tramite la sua chiave |
HashSet<T> |
Elementi unici e controlli veloci del tipo «c’è o non c’è?» |
BTreeMap<K, V> |
Coppie chiave-valore tenute in ordine di chiave |
VecDeque<T> |
Una coda: inserire e togliere da entrambe le estremità |
Trovi dettagli ed esempi nelle pagine HashMap e HashSet e BTreeMap.
Option e Result
Sezione intitolata “Option e Result”| Metodo | Funziona su | Cosa fa |
|---|---|---|
.unwrap() |
Entrambi | Restituisce il valore, va in panic se è None/Err |
.expect("msg") |
Entrambi | Come .unwrap(), con un messaggio di panic tuo |
.unwrap_or(default) |
Entrambi | Restituisce il valore, oppure un valore di riserva |
.is_some() / .is_none() |
Option |
Controlla di quale variante si tratta |
.is_ok() / .is_err() |
Result |
Controlla di quale variante si tratta |
? |
Entrambi | Esce subito dalla funzione in caso di None/Err |
Trovi dettagli ed esempi nelle pagine Option e Result.
Specificatori di formato (println!, format!)
Sezione intitolata “Specificatori di formato (println!, format!)”| Specificatore | Cosa stampa |
|---|---|
{} |
Visualizzazione normale (richiede il trait Display) |
{:?} |
Formato di debug |
{:#?} |
Formato di debug ben impaginato |
{:.2} |
2 cifre decimali |
{:5} |
Riempie fino a una larghezza di 5 |
{name} |
Inserisce una variabile chiamata name |
Trovi dettagli ed esempi nella pagina Output.
Comandi Cargo
Sezione intitolata “Comandi Cargo”| Comando | Cosa fa |
|---|---|
cargo new name |
Crea un nuovo progetto |
cargo run |
Compila ed esegue |
cargo check |
Cerca gli errori in fretta, senza generare l’eseguibile |
cargo test |
Esegue i tuoi test |
cargo add crate |
Aggiunge una dipendenza |
cargo fmt |
Formatta il codice |
cargo clippy |
Analizza il codice in cerca di errori comuni |
cargo build --release |
Compila un eseguibile ottimizzato |
Trovi dettagli ed esempi nella pagina Cargo e crate.
Sintassi degli intervalli (range)
Sezione intitolata “Sintassi degli intervalli (range)”| Sintassi | Significato |
|---|---|
1..5 |
Da 1 fino a 5, escluso |
1..=5 |
Da 1 fino a 5, incluso |
..3 |
Dall’inizio fino a 3, escluso |
2.. |
Da 2 fino alla fine |
.. |
Tutto |
Trovi dettagli ed esempi nelle pagine For e Slice.
Crate popolari
Sezione intitolata “Crate popolari”| Ti serve… | Crate | Lezione |
|---|---|---|
| JSON (e altri formati) | serde + serde_json |
JSON con Serde |
| Codice asincrono, timer, rete | tokio |
Async/await |
| Un’interfaccia da riga di comando | clap |
Strumento CLI con clap |
| Gestione degli errori semplice | anyhow, thiserror |
anyhow e thiserror |
| Numeri casuali | rand |
Numeri casuali |
| Espressioni regolari | regex |
Espressioni regolari |
| Date e orari | chrono |
Date e orari |
| Logging | log + env_logger, tracing |
Logging |
| Un server web | axum |
API web con Axum |
Aggiungine uno qualsiasi con cargo add <crate>. Leggi Cargo e crate per capire come scegliere un buon crate.
Per approfondire
Sezione intitolata “Per approfondire”- Rust Language Cheat Sheet — cheats.rs (in inglese): un riferimento molto più grande su una sola pagina, dalla sintassi alla disposizione in memoria, per quando vuoi più dettagli.
- Appendix B: Operators and Symbols — The Rust Book (in inglese): tutti gli operatori e i simboli di Rust, con il loro significato.
- std::fmt — documentazione della libreria standard (in inglese): la sintassi completa di formattazione dietro
println!eformat!: larghezza, riempimento, precisione e altro. - Cargo Commands — The Cargo Book (in inglese): tutti i comandi
cargoe le loro opzioni. - The Rust Standard Library (in inglese): la documentazione completa delle API di
String,Vec,Option,Resulte del resto. Usa la casella di ricerca in alto.