Saltar al contenido principal
eLearner.app
Módulo 1 · Lección 1 de 21/14 en el curso~10 min
Lecciones del módulo (1/2)

Variables y mutabilidad

En Rust, la gestión de variables y memoria se rige por dos principios fundamentales: la seguridad y el control. Por esta razón, a diferencia de muchos otros lenguajes de programación, en Rust las variables son inmutables por defecto.

Esto significa que una vez que se asigna un valor a una variable, este no se puede modificar. Si intentas hacerlo, el compilador generará un error.

Variables Inmutables y la Palabra Clave mut

Para declarar una variable se usa la palabra clave let:

Code
let x = 5; // Immutabile di default
// x = 6; // ERRORE! Il compilatore si rifiuterà di compilare.

Si necesitas cambiar el valor de una variable, debes hacerla explícitamente mutable usando la palabra clave mut justo después de let:

Code
let mut y = 10; // Mutabile
println!("Il valore di y e: {}", y);
y = 15; // Valido!
println!("Il valore modificato di y e: {}", y);

El uso del prefijo mut comunica claramente al compilador y al lector del código que ese valor cambiará en el transcurso de la ejecución.

Shadowing (Sombreado)

Rust también permite el concepto de shadowing (sombreado), es decir, la redeclaración de una variable con el mismo nombre usando nuevamente la palabra clave let. La nueva variable "cubre" (o ensombrece) a la anterior:

Code
let x = 5;
let x = x + 1; // Shadowing: x ora vale 6
let x = x * 2; // Shadowing: x ora vale 12

A diferencia de mut, el shadowing te permite:

  1. Cambiar el tipo de dato de una variable manteniendo el mismo nombre.
  2. Mantener la inmutabilidad de la variable después de las transformaciones.
Code
let spaces = "   "; // Tipo: &str (stringa)
let spaces = spaces.len(); // Tipo: usize (numero intero)

Utilidad del Shadowing y los Ámbitos (Scopes)

El shadowing no se limita al mismo bloque; se puede utilizar dentro de bloques anidados ({}) para sobrescribir temporalmente un valor. Cuando el bloque interno termina, la variable original vuelve a ser visible:

Code
let x = 5;
{
    let x = x * 2; // Shadowing valido solo all'interno del blocco
    println!("Valore nel blocco interno: {}", x); // Stampa 10
}
println!("Valore nel blocco esterno: {}", x); // Stampa 5

Este mecanismo es extremadamente seguro y eficiente porque ocurre por completo en tiempo de compilación, garantizando la seguridad de tipos sin ningún costo de rendimiento en tiempo de ejecución.


Pruébalo tú

Ejercicio#rust.m1.l1.e1
Intentos: 0Cargando...

Declara una variable mutable llamada x con el valor inicial 5. Luego suma 10 a x e imprímela en pantalla usando la macro println!.

Cargando editor...
Mostrar pista

Declara la variable con `let mut x = 5;`, luego increméntala con `x += 10;` (o `x = x + 10;`) y finalmente imprímela con `println!('{}', x);`.

Solución disponible después de 3 intentos

Ejercicio#rust.m1.l1.e2
Intentos: 0Cargando...

Declara una variable inmutable y con el valor 10. Realiza el shadowing de y declarándola de nuevo con let para multiplicar su valor anterior por 2, y finalmente imprímela usando println!.

Cargando editor...
Mostrar pista

Usa `let y = 10;`, luego haz shadowing declarándola de nuevo con `let y = y * 2;` y finalmente usa `println!` para visualizarla.

Solución disponible después de 3 intentos

Ejercicio#rust.m1.l1.e3
Intentos: 0Cargando...

Declara una variable inmutable input que contenga el valor de cadena "42". Realiza el shadowing de input declarándola como un entero de tipo i32 convirtiendo el valor original mediante input.parse::<i32>().unwrap(). Por último, imprímela usando la macro println!.

Cargando editor...
Mostrar pista

Declara `let input = "42";`, luego haz shadowing con `let input: i32 = input.parse().unwrap();` e imprímela con `println!("{}", input);`.

Solución disponible después de 3 intentos