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

const std = @import("std");

pub fn main() void {
    var i: i32 = 0;
    while (i < 5) : (i += 1) {
        std.debug.print("i: {}\n", .{i});
    }
}

Analyse:

  • Variable initialisiereniauf 0.
  • Solangeiist 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

const std = @import("std");

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.
  • VerwendungforSchleife, 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

const std = @import("std");

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:

  • WanniWenn es gleich 5 ist,continueüberspringt diese Iteration.
  • WanniWenn 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

const std = @import("std");

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ßereforSchleife iteriert über das Array der Buchstaben.
  • Die innerewhileSchleife 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

pub fn main() void {
    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

pub fn main() void {
    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

pub fn main() void {
    loop: while (true) {
        while (true) {
            std.debug.print("Innerhalb der verschachtelten Schleife\n");
            break :loop; // Äußere Schleife verlassen
        }
    }
}
Andere Erweiterungen