English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Bucles en Rust

Además de las expresiones condicionales flexibles, Rust también tiene un diseño maduro de estructuras de bucle. Esto debería poder sentirse por un desarrollador experimentado.

Bucle while

El bucle while es el tipo más común de bucle de expresión condicional:

fn main() {
    let mut number = 1; 
    while number != 4  
        println!("{}", number); 
        number += 1; 
    } 
    println!("EXIT"); 
}

Resultados de ejecución:

1
2
3
EXIT

El lenguaje Rust no tiene do hasta la fecha de redacción de este tutorial.-Uso de while, pero do se especifica como palabra reservada, tal vez se utilice en futuras versiones.

En el lenguaje C, el bucle for utiliza la expresión ternaria para controlar el bucle, pero en Rust no hay este uso, se debe reemplazar con el bucle while:

Lenguaje C

int i; 
for (i = 0; i < 10; i++) { 
    // Cuerpo del bucle
}

Rust

let mut i = 0; 
while i < 10  
    // Cuerpo del bucle 
    i += 1; 
}

Bucle for

El bucle for es la estructura de bucle más común, generalmente utilizada para recorrer una estructura de datos lineal (por ejemplo, un array). El bucle for recorre el array:

fn main() { 
    10 2 3 4 5 
    for i in a.iter() { 
        println!("El valor es: {}", i); 
    } 
}

Resultados de ejecución:

El valor es: 10
El valor es: 20
El valor es: 30
El valor es: 40
El valor es: 50

fn main() { 
10 2 3 4 5 
    5  
        println!("a[{}] = {} 
    } 
}

Resultados de ejecución:

a[0] = 10
a[1] = 20
a[2] = 30
a[3] = 40
a[4] = 50

Bucle 'loop'

Los desarrolladores experimentados han enfrentado varias situaciones en las que un bucle no puede determinar si debe continuar en el principio o final del bucle, sino que debe controlar el flujo del bucle en algún punto del cuerpo del bucle. Si se encuentra en esta situación, a menudo implementamos la operación de salida del bucle en un bucle 'while (true)':

El lenguaje Rust tiene una estructura de bucle infinita nativa: 'loop':

fn main() { 
    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; 
    } 
}

Resultados de ejecución:

'R' 
'U' 
'N'

El bucle 'loop' puede salir del bucle completo con la palabra clave 'break', de manera similar a 'return', proporcionando un valor de retorno externo. Este es un diseño muy ingenioso, ya que el bucle 'loop' a menudo se utiliza como herramienta de búsqueda, y si encuentra algo, naturalmente debe entregar ese resultado:

fn main() { 
    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!("El índice de 'O' es {}", location); 
}

Resultados de ejecución:

 El índice de 'O' es 3