Rust - Básico - 01 - Sombreado de variables

Sombreado de variables

Comprensión

En Rust, si una variable (let o let mut) a se declara de nuevo más adelante, este comportamiento se llama shadowing (sombreado).

  • Las constantes const no pueden sombrearse.
  • El sombreado puede tener alcance de bloque ({}).
  • Con el mismo nombre se puede declarar un nuevo tipo de datos.

Fuente

https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html#shadowing

fn main() {
    let x = 5;
    let x = x + 1;
    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {}", x);
    }
    println!("The value of x is: {}", x);
}

El programa vincula primero x al valor 5. Después vuelve a declararla con let x = y suma 1, por lo que pasa a valer 6. En un alcance interno, una tercera declaración sombrea x y multiplica el valor por 2, obteniendo 12. Al terminar ese alcance, el sombreado interno desaparece y x vuelve a valer 6.

The value of x in the inner scope is: 12
The value of x is: 6

El sombreado se diferencia de marcar una variable como mut: si intentamos reasignarla sin let, obtenemos un error de compilación. Con let podemos transformar un valor y dejar la variable inmutable después. Otra diferencia es que podemos cambiar el tipo y conservar el mismo nombre:

let spaces = "   ";
let spaces = spaces.len();

La primera variable es una cadena y la segunda, una variable nueva con el mismo nombre, es un número. Con mut esto produce un error porque no se puede cambiar el tipo de una variable:

let mut spaces = "   ";
spaces = spaces.len();