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
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
for (i = 0; i < 10; i++) {
// Schleifenkörper
}
Rust
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
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
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
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
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' 的索引为 3Andere Erweiterungen