Rust Schleifen

Neben flexiblen bedingten Anweisungen sind auch Rusts Schleifenstrukturen sehr gut gestaltet. Als kampferprobter Entwickler solltest du das spüren können.

while-Schleife

Die while-Schleife ist die typischste bedingte Schleife:

Beispiel

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

Ausgabe:

1
2
3
EXIT

Zum Zeitpunkt, als dieses Tutorial geschrieben wurde, besitzt Rust kein do-while-Konstrukt, aber `do` ist als reserviertes Wort festgelegt und könnte in zukünftigen Versionen verwendet werden.

In C verwendet die for-Schleife eine Anweisung mit drei Ausdrücken, um die Schleife zu steuern, aber Rust hat dieses Konstrukt nicht, daher muss stattdessen eine while-Schleife verwendet werden:

C-Sprache

int i;
for (i = 0; i < 10; i++) {
    // Schleifenkörper
}

Rust

let mut i = 0;
while i < 10 {
    // Schleifenkörper
    i += 1;
}

for-Schleife

Die for-Schleife ist das am häufigsten verwendete Schleifenkonstrukt und wird oft verwendet, um über eine lineare Datenstruktur (wie ein Array) zu iterieren. Eine for-Schleife iteriert über ein Array:

Beispiel

fn main() {
    let a = [10, 20, 30, 40, 50];
    for i in a.iter() {
        println!("Value is: {}", i);
    }
}

Ausgabe:

值为 : 10
值为 : 20
值为 : 30
值为 : 40
值为 : 50

Die for-Schleife in diesem Programm iteriert über das Array a. `a.iter()` repräsentiert den Iterator von a; wir werden nicht ins Detail gehen, bevor wir Objekte behandeln.

Natürlich kann die for-Schleife auch über den Index auf das Array zugreifen:

Beispiel

fn main() {
let a = [10, 20, 30, 40, 50];
    for i in 0..5 {
        println!("a[{}] = {}", i, a[i]);
    }
}

Ausgabe:

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

loop-Schleife

Erfahrene Entwickler sind sicherlich schon auf Situationen gestoßen, in denen eine Schleife am Anfang oder Ende nicht entscheiden kann, ob sie fortgesetzt werden soll, und die Schleifenausführung irgendwo in der Mitte des Schleifenrumpfs gesteuert werden muss. In solchen Fällen implementieren wir oft einen vorzeitigen Ausstieg aus der Schleife innerhalb einer `while (true)`-Schleife.

Rust hat ein natives Konstrukt für eine Endlosschleife — `loop`:

Beispiel

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;
    }
}

Ausgabe:

'R' 
'U' 
'N' 

Eine `loop`-Schleife kann das Schlüsselwort `break` verwenden, ähnlich wie `return`, um die gesamte Schleife zu verlassen und einen Rückgabewert nach außen zu liefern. Das ist ein sehr cleveres Design, denn eine `loop`-Schleife wird oft als Suchwerkzeug verwendet; wenn etwas gefunden wird, soll das Ergebnis natürlich herausgegeben werden:

Beispiel

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!(" \'O\''s index is {}", location);
}

Ausgabe:

 'O' 的索引为 3
Andere Erweiterungen