00
:
00
:
00
:
00
•Corso SEO AI - Usa SEOEMAIL al checkout per il 30% di sconto

Operatori Logici in Rust

Gli operatori logici in Rust operano su valori booleani (bool) e restituiscono un valore booleano. Sono fondamentali per costruire condizioni complesse.

Operatori Disponibili

Operatore Nome Descrizione
&& AND logico Vero se entrambi sono veri
|| OR logico Vero se almeno uno è vero
! NOT logico Inverte il valore booleano

AND Logico (&&)

fn main() {
    let eta = 25;
    let ha_patente = true;

    if eta >= 18 && ha_patente {
        println!("Puoi guidare");
    }

    println!("{}", true && true);   // true
    println!("{}", true && false);  // false
    println!("{}", false && true);  // false
    println!("{}", false && false); // false
}

OR Logico (||)

fn main() {
    let giorno = "sabato";

    if giorno == "sabato" || giorno == "domenica" {
        println!("È weekend!");
    }

    println!("{}", true || false);  // true
    println!("{}", false || true);  // true
    println!("{}", false || false); // false
}

NOT Logico (!)

fn main() {
    let attivo = false;

    if !attivo {
        println!("L'utente non è attivo");
    }

    println!("{}", !true);  // false
    println!("{}", !false); // true
}

Valutazione Short-Circuit

Rust utilizza la valutazione a corto circuito: il secondo operando non viene valutato se il risultato è determinabile dal primo.

fn controllo_lento() -> bool {
    println!("Funzione chiamata!");
    true
}

fn main() {
    // controllo_lento() NON viene chiamata
    if false && controllo_lento() {
        println!("Non raggiungibile");
    }

    // controllo_lento() NON viene chiamata
    if true || controllo_lento() {
        println!("Sempre raggiungibile");
    }
}

Combinare Condizioni

fn puo_iscriversi(eta: u32, ha_documenti: bool, ha_acconto: bool) -> bool {
    eta >= 18 && (ha_documenti || ha_acconto)
}

Precedenza: ! > && > ||. Usa le parentesi per rendere esplicito l’ordine.

Operatori Logici con Pattern Matching

fn classifica_numero(n: i32) -> &'static str {
    if n > 0 && n % 2 == 0 {
        "positivo e pari"
    } else if n > 0 && n % 2 != 0 {
        "positivo e dispari"
    } else if n == 0 {
        "zero"
    } else {
        "negativo"
    }
}

Conclusione

Gli operatori logici in Rust funzionano esclusivamente con il tipo bool — non esiste conversione implicita da altri tipi. La valutazione short-circuit è garantita dal linguaggio, rendendo sicuro l’uso di espressioni come vec.len() > 0 && vec[0] == 1.