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

Operatori di Assegnazione in Rust

Gli operatori di assegnazione in Rust permettono di assegnare valori alle variabili e di combinare operazioni con l’assegnazione. Ricorda che le variabili devono essere dichiarate mut per essere riassegnate.

Assegnazione Base

fn main() {
    let x = 10;        // Immutabile
    let mut y = 20;    // Mutabile
    y = 30;            // OK: y è mutabile
    // x = 15;         // ERRORE: x non è mutabile
}

Operatori di Assegnazione Composti

Operatore Equivalente Trait
+= x = x + y AddAssign
-= x = x - y SubAssign
*= x = x * y MulAssign
/= x = x / y DivAssign
%= x = x % y RemAssign
fn main() {
    let mut x = 10;

    x += 5;   // x = 15
    x -= 3;   // x = 12
    x *= 2;   // x = 24
    x /= 4;   // x = 6
    x %= 4;   // x = 2

    println!("{}", x); // 2
}

Operatori Bitwise Composti

Operatore Equivalente Trait
&= x = x & y BitAndAssign
|= x = x | y BitOrAssign
^= x = x ^ y BitXorAssign
<<= x = x << y ShlAssign
>>= x = x >> y ShrAssign
fn main() {
    let mut x: u8 = 0b1100; // 12

    x &= 0b1010;  // 1000 → 8
    x |= 0b0011;  // 1011 → 11
    x ^= 0b0101;  // 1110 → 14
    x <<= 1;      // 11100 → 28
    x >>= 2;      // 111 → 7
}

Assegnazione Destrutturante

Rust supporta l’assegnazione con pattern destructuring:

fn main() {
    let (mut a, mut b) = (1, 2);
    (a, b) = (b, a); // Swap
    println!("{} {}", a, b); // 2 1

    let mut punto = (0.0, 0.0);
    (punto.0, punto.1) = (3.0, 4.0);
}

Implementare Operatori Composti per Tipi Personalizzati

use std::ops::AddAssign;

#[derive(Debug)]
struct Vettore {
    x: f64,
    y: f64,
}

impl AddAssign for Vettore {
    fn add_assign(&mut self, other: Self) {
        self.x += other.x;
        self.y += other.y;
    }
}

fn main() {
    let mut v = Vettore { x: 1.0, y: 2.0 };
    v += Vettore { x: 3.0, y: 4.0 };
    println!("{:?}", v); // Vettore { x: 4.0, y: 6.0 }
}

Conclusione

Gli operatori di assegnazione composti in Rust sono implementati tramite trait della libreria standard, rendendoli estensibili ai tipi personalizzati. Ricorda che la variabile deve essere mut per poter essere riassegnata e che Rust non supporta l’operatore := né l’assegnazione multipla con virgole come in altri linguaggi.