Un array en Rust es una colección de elementos de un mismo tipo (homogénea) que tiene un tamaño definido en el momento de la compilación y que no puede cambiar durante la ejecución. Su sintaxis es [T; N], donde T es el tipo de dato y N es la cantidad de elementos.
A diferencia de los vectores (Vec<T>), los arrays se almacenan directamente en el stack (pila). Esto los hace extremadamente rápidos y eficientes, ya que el sistema sabe exactamente cuánta memoria reservar desde el principio y no necesita realizar asignaciones en el heap. Sin embargo, esta eficiencia tiene un costo: la rigidez. Al ser el tamaño parte de su definición de tipo, un array de [i32; 5] es un tipo de dato completamente distinto a un [i32; 6]; no puedes añadir ni quitar elementos de uno a otro.
Debes usar arrays cuando conozcas la cantidad exacta de elementos de antemano (por ejemplo, los 7 días de la semana o las 3 coordenadas de un punto en un espacio) y desees el máximo rendimiento sin la sobrecarga de la gestión de memoria en el heap. Si intentas acceder a un índice que no existe (por ejemplo, el elemento 10 en un array de 5), Rust provocará un panic, lo que detendrá la ejecución del programa para evitar errores de acceso a memoria no permitidos.
fn main() {
// Definición de un array con 5 elementos de tipo i32
// El tamaño [5] es parte integral del tipo de dato
let numeros: [i32; 5] = [10, 20, 30, 40, 50];
// Inicialización rápida: un array de 5 ceros
// Sintaxis: [valor; tamaño]
let ceros: [i32; 5] = [0; 5];
// Acceso a un elemento mediante su índice (comienza en 0)
let segundo_elemento = numeros[1];
// El método .len() devuelve la longitud constante del array
let longitud = numeros.len();
println!("Array numeros: {:?}", numeros);
println!("El segundo elemento es: {}", segundo_elemento);
println!("Longitud: {}", longitud);
println!("Array ceros: {:?}", ceros);
// Iteración sobre el array usando referencias (&)
// Usamos &numeros para no tomar posesión (ownership) del array
println!("Iterando sobre los elementos:");
for valor in &numeros {
println!("Valor actual: {}", valor);
}
// Nota: Si usáramos 'for valor in numeros', el array se movería
// y no podríamos usarlo después de este bucle.
}
Explicación del Código
let numeros: [i32; 5] = [10, 20, 30, 40, 50];: Declara una variable llamadanumerosde tipo[i32; 5]. Contiene cinco enteros de 32 bits.let ceros: [i32; 5] = [0; 5];: Utiliza la sintaxis abreviada para crear el arrayceroscon cinco elementos, todos inicializados con el valor0.let segundo_elemento = numeros[1];: Accede al segundo elemento denumeros. Como los índices empiezan en0, el índice1corresponde al valor20.let longitud = numeros.len();: Llama al método.len()sobrenumeros, que retorna el tamaño constante5.println!(..., {:?}", numeros);: Se utiliza{:?}para imprimir el array completo mediante el traitDebug.for valor in &numeros: Inicia un bucle sobre el array. Al usar&numeros, estamos iterando sobre referencias (&i32). Esto es crucial porque permite que el arraynumerossiga siendo válido después del bucle; si no usáramos el símbolo&, el array se “movería” (ownership) al bucle y no podríamos volver a usarlo.println!("Valor actual: {}", valor);: Imprime cadavalorobtenido durante la iteración.
N° 16