Zig-Schleifen
In Zig umfassen SchleifenstrukturenwhileSchleifen undforSchleifen. Jede Schleife hat ihre spezifische Syntax und Verwendung. Im Folgenden werden beide Schleifenstrukturen beschrieben, einschließlich ihrer Syntax, Beschreibung und Beispiele.
1, whileSchleifen
Syntax
while (condition) : (increment) {
// code block
}
condition: ein boolescher Ausdruck. Solange ertrueist, wird die Schleife weiter ausgeführt.increment(optional): ein Ausdruck, der nach dem Ende jeder Schleifeniteration ausgeführt wird.
Beschreibung
whileDie Schleife prüft die Bedingung vor jeder Iteration. Wenn die Bedingungtrueist, führt sie den Code im Schleifenkörper aus. Nachdem der Schleifenkörper beendet ist, führe denincrementAusdruck aus (falls vorhanden). Dann prüfe die Bedingung erneut, bis siefalse。
Beispiel
Beispiel
pub fn main() void {
var i: i32 = 0;
while (i < 5) : (i += 1) {
std.debug.print("i: {}\n", .{i});
}
}
Analyse:
- Variable initialisieren
iauf 0. - Solange
iist kleiner als 5, wird der Schleifenkörper ausgeführt. - Nach jeder Schleifeniteration,
iwird um 1 erhöht.
Das kompilierte Ausführungsergebnis ist:
i: 0 i: 1 i: 2 i: 3 i: 4
2, forSchleife
Syntax
for (collection) |item, index| {
// code block
}
collection: ein Array, Slice oder eine andere iterierbare Sammlung.item: das aktuelle Element der Sammlung in jeder Iteration.index(optional): der Index des aktuellen Elements.
Beschreibung
forDie Schleife wird verwendet, um über jedes Element in einer Sammlung zu iterieren. In jeder Iteration wird das aktuelle Element zugewiesen anitem, und der Code im Schleifenkörper wird ausgeführt.
Beispiel
Beispiel
pub fn main() void {
const array = [5]i32{ 1, 2, 3, 4, 5 };
var index: usize = 0; // Die Indexvariable benötigt einen deklarierten Typ
for (array) |item| {
std.debug.print("index: {}, item: {}\n", .{ index, item });
index += 1; // Index aktualisieren
}
}
Analyse:
- Definiert ein Array mit 5 Ganzzahlen.
- Verwendung
forSchleife, um über jedes Element im Array zu iterieren und den Elementwert zuzuweisen anitem, und den Index anindex。 - Geben Sie im Schleifenkörper den Wert und den Index jedes Elements aus.
Das kompilierte Ausführungsergebnis ist:
index: 0, item: 1 index: 1, item: 2 index: 2, item: 3 index: 3, item: 4 index: 4, item: 5
3, continueundbreak
Syntax
continue: Überspringt die aktuelle Iteration und fährt mit der nächsten fort.break: beendet die Schleife.
Beschreibung
continuewird verwendet, um den restlichen Code in der aktuellen Iteration zu überspringen und sofort mit der nächsten Iteration zu beginnen.breakwird verwendet, um die gesamte Schleife zu beenden.
Beispiel
Beispiel
pub fn main() void {
var i: i32 = 0;
while (i < 10) : (i += 1) {
if (i == 5) {
continue; // Überspringe die Iteration, in der i gleich 5 ist
}
if (i == 8) {
break; // Beende die Schleife
}
std.debug.print("i: {}\n", .{i});
}
}
Analyse:
- Wann
iWenn es gleich 5 ist,continueüberspringt diese Iteration. - Wann
iWenn er gleich 8 ist,breakbeendet die Schleife.
Das kompilierte Ausführungsergebnis ist:
i: 0 i: 1 i: 2 i: 3 i: 4 i: 6 i: 7
5. Verschachtelte Schleifen
Syntax
for (outer_collection) |outer_item| {
for (inner_collection) |inner_item| {
// code block
}
}
Beschreibung
Eine Schleife, die eine weitere Schleife in ihrem Rumpf enthält, wird als verschachtelte Schleife bezeichnet. Die innere Schleife wird bei jeder Iteration der äußeren Schleife ausgeführt.
Beispiel
Beispiel
pub fn main() void {
// Ein Array mit drei Zeichenketten deklarieren
const letters = [_][]const u8{ "A", "B", "C" };
// Über das Array iterieren
for (letters) |letter| {
var count: i32 = 0; // Einen Zähler deklarieren
// Eine while-Schleife verwenden, um jeden Buchstaben und den Zähler auszugeben
while (count < 3) : (count += 1) {
std.debug.print("{s} - {}\n", .{ letter, count });
}
}
}
Analyse:
- Die äußere
forSchleife iteriert über das Array der Buchstaben. - Die innere
whileSchleife wird 3 Mal ausgeführt und gibt den Buchstaben und den Zähler aus.
Das kompilierte Ausführungsergebnis ist:
A - 0 A - 1 A - 2 B - 0 B - 1 B - 2 C - 0 C - 1 C - 2
6. Weitere Schleifen
Endlosschleife
Du kannst eine Endlosschleife mit einer while-Schleife erstellen, solange die Bedingung immer wahr ist:
Beispiel
while (true) {
// Codeblock
// Muss einen Ausstiegsmechanismus enthalten, andernfalls läuft das Programm endlos
}
}
Range-Schleife
Zig ermöglicht es dir außerdem, über Bereiche zu iterieren, was den Code in manchen Fällen vereinfachen kann:
Beispiel
for (0..10) |i| {
std.debug.print("i: {}\n", .{i});
}
}
Beschriftete Schleife
Zig unterstützt beschriftete Schleifen, mit denen du Schleifen benennen kannst, was bei verschachtelten Schleifen sehr nützlich ist:
Beispiel
loop: while (true) {
while (true) {
std.debug.print("Innerhalb der verschachtelten Schleife\n");
break :loop; // Äußere Schleife verlassen
}
}
}