Rust Bucles
Además de las flexibles sentencias condicionales, Rust también tiene un diseño muy maduro de estructuras de bucle. Esto es algo que los desarrolladores experimentados pueden notar.
Bucle while
El bucle while es el bucle de sentencia condicional más típico:
Ejemplo
let mut number = 1;
while number != 4 {
println!("{}", number);
number += 1;
}
println!("EXIT");
}
Resultado de la ejecución:
1 2 3 EXIT
Hasta la fecha de redacción de este tutorial, el lenguaje Rust no tiene una construcción do-while, pero "do" está designada como palabra reservada, y quizás se use en versiones futuras.
En C, el bucle for utiliza una sentencia de tres partes para controlar el bucle, pero Rust no tiene ese uso, por lo que se necesita usar un bucle while en su lugar:
Lenguaje C
for (i = 0; i < 10; i++) {
// Cuerpo del bucle
}
Rust
while i < 10 {
// Cuerpo del bucle
i += 1;
}
Bucle for
El bucle for es la estructura de bucle más utilizada, a menudo se usa para iterar sobre una estructura de datos lineal (como un arreglo). El bucle for recorre un arreglo:
Ejemplo
let a = [10, 20, 30, 40, 50];
for i in a.iter() {
println!("Valor : {}", i);
}
}
Resultado de la ejecución:
值为 : 10 值为 : 20 值为 : 30 值为 : 40 值为 : 50
El bucle for en este programa completa el recorrido del arreglo a. a.iter() representa el iterador de a; no entraremos en detalles hasta el capítulo sobre objetos.
Por supuesto, el bucle for también puede acceder al arreglo mediante índices:
Ejemplo
let a = [10, 20, 30, 40, 50];
for i in 0..5 {
println!("a[{}] = {}", i, a[i]);
}
}
Resultado de la ejecución:
a[0] = 10 a[1] = 20 a[2] = 30 a[3] = 40 a[4] = 50
Bucle loop
Los desarrolladores experimentados seguramente se han encontrado con situaciones donde un bucle no puede determinar al principio ni al final si debe continuar; es necesario controlar la ejecución del bucle en algún punto del cuerpo del bucle. En tales casos, a menudo implementamos la salida a mitad del bucle dentro de un bucle while (true).
Rust tiene una estructura de bucle infinito nativa: loop:
Ejemplo
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
loop {
let ch = s[i];
if ch == 'O' {
break;
}
println!("\'{}\'", ch);
i += 1;
}
}
Resultado de la ejecución:
'R' 'U' 'N'
El bucle loop puede usar la palabra clave break, similar a return, para salir de todo el bucle y proporcionar un valor de retorno al exterior. Es un diseño muy ingenioso, porque un bucle loop a menudo se usa como herramienta de búsqueda; si se encuentra algo, naturalmente se debe entregar el resultado:
Ejemplo
let s = ['R', 'U', 'N', 'O', 'O', 'B'];
let mut i = 0;
let location = loop {
let ch = s[i];
if ch == 'O' {
break i;
}
i += 1;
};
println!(" \'O\'El índice es {}, location);
}
Resultado de la ejecución:
'O' 的索引为 3Otras extensiones