Menu

Zero While-Schleifen: Iteration in der Agent-first-Sprache

Wie while-Schleifen in Zero heute funktionieren: die Bedingung, der Schleifen-Body, das Fehlen von for und do-while in der frühen Sprache und was Schleifen mit expliziten Effekten zu tun haben.

Diese Seite enthält ausführbare Editoren — bearbeiten, ausführen und Ausgabe sofort sehen.

Die Grundlagen

while führt seinen Body aus, solange eine bool-Bedingung true bleibt:

while condition {
    // body
}

Der Compiler wertet die Bedingung vor jeder Iteration aus:

  • true – Body ausführen, dann erneut prüfen.
  • false – die Schleife verlassen.

Eine kleine Illustration aus Zeros Beispielen mit einer Bedingung, die schon false ist:

Führ das aus und nur das zweite write löst aus. Der Body des while läuft nie, weil die Bedingung beim ersten Mal false war.

Die Bedingung ist ein bool

Wie bei If/Else muss die Schleifenbedingung ein bool sein. Zero konvertiert Integer, Strings oder andere Werte nicht in einen Boolean.

while count {              // Compile-Fehler
    // ...
}

while count > 0 {          // OK
    // ...
}

Die Bedingung kann alles sein, was zu bool auswertet: ein Binding, ein Vergleich, eine &&/||-Kombination oder ein Funktionsaufruf. Es gelten dieselben Regeln wie bei if.

Gezählte Schleifen

Das klassische „mach etwas N-mal"-Muster verwendet einen Zähler und ein while:

let mut i = 0
while i < 10 {
    // Arbeit erledigen
    i = i + 1
}

Drei Teile: ein Anfangswert, eine Bedingung, die gegen die Grenze vergleicht, und ein Update im Body. Dieses Muster hat jede imperative Sprache – Zero zieht ihm nur kein for-Schlüsselwort über.

Eine Anmerkung zur mut-Schreibweise oben: Wie Zero veränderliche Bindings in deiner Toolchain schreibt, kann sich in pre-1.0-Versionen unterscheiden. Führ zero check --json gegen einen kleinen Test aus, um die genaue Syntax zu bestätigen, die dein Compiler akzeptiert. Das konzeptuelle Muster (Zähler + Bedingung + Update) ist der stabile Teil.

Endlosschleifen

Ein while mit immer wahrer Bedingung läuft ewig:

while true {
    // auf Arbeit warten, sie erledigen, wieder loopen
}

Das ist die richtige Form für einen Event-Loop, eine REPL oder einen lang laufenden Server. Zum Beenden terminierst du entweder den Prozess, lässt einen Fehler aus dem Body herausfließen oder strukturierst die Bedingung so um, dass sie irgendwann falsch wird.

Wann man zu einer Schleife greift

Schleifen sind ein Werkzeug, das man sparsam einsetzen sollte. Vieles, was in anderen Sprachen nach Schleifen aussieht, hat in Zero eine sauberere Form:

  • Über eine feste Collection iterieren: bevorzuge eine Funktion, die die Standardbibliothek oder deine Shape bereitstellt – einen forEach-Helfer, einen Folder oder einen rekursiven Walk.
  • Bis zum Ende der Eingabe lesen: loope über einen fehlbaren Read, aber nutze check und raises, um die Grenze sauber zu behandeln, statt Status-Flags zu verschachteln.
  • Auf eine Bedingung pollen: überleg, ob dir das Design stattdessen ein Signal liefern sollte. Polling-Schleifen sind in jeder Systems-Sprache ein Code-Smell.

Derselbe Reflex gilt für Agenten: eine knappe, deklarative Form ist sowohl für Menschen als auch für Code-Generatoren leichter zu durchdenken als eine handgeschriebene Zähler-Schleife.

Schleifen und Effekte

Ein while-Body kann wie jeder andere Block I/O machen – aber nur, wenn er Zugriff auf eine World-Capability (oder einen Ausschnitt davon) hat. Eine Funktion, deren Signatur World nicht erwähnt, darf so viel loopen, wie sie will, aber nichts nach außen schreiben. Diese Eigenschaft gilt auch innerhalb des Schleifenkörpers; die Schleife gewährt keine neuen Capabilities.

Klingt selbstverständlich, ist aber genau der Grund, warum du ein while in eine „reine" Rechen-Funktion stecken und – allein an der Signatur – trotzdem wissen kannst, dass sie nichts drucken oder auf die Platte schreiben kann.

Stil-Hinweise

Ein paar kleine Gewohnheiten, die sich auszahlen:

  • Halte die Bedingung offensichtlich. Macht die Bedingung echte Arbeit, lift sie in eine benannte Funktion oder ein Binding, damit die Schleife sauber lesbar bleibt.
  • Aktualisiere den Zähler am Ende des Bodys, nicht verstreut. Off-by-one-Bugs fallen schneller auf.
  • Bevorzuge frühe Abbruch-Bedingungen, die du als Schleifenbedingung selbst ausdrücken kannst, gegenüber Flags, die mitten in der Iteration umkippen. Weniger bewegliche Teile.

Als Nächstes: Shapes

Du hast jetzt Zeros zentralen Kontrollfluss gesehen. Das nächste Kapitel dreht sich um das Modellieren von Daten – mit einem Start bei Shapes, Zeros struct-artigen Produkttypen.

Häufig gestellte Fragen

Wie funktionieren While-Schleifen in Zero?

Verwende while condition { ... }. Die Bedingung wird vor jeder Iteration ausgewertet; ist sie true, läuft der Body und die Schleife prüft erneut. Ist sie false, verlässt die Schleife den Block, und die Ausführung läuft hinter der schließenden Klammer weiter. Die Bedingung muss ein bool sein.

Hat Zero eine for-Schleife?

Frühes Zero liefert while als einziges Loop-Konstrukt. Die Sprache hält die Oberfläche bewusst klein, solange sie sich stabilisiert – weniger Schlüsselwörter heißt weniger Wege, mit denen ein Agent die falsche Form wählt. Eine for-Schleife über einen Bereich oder eine Collection könnte später kommen; bis dahin baust du dasselbe Muster mit while und einem Zähler.

Wie schreibe ich in Zero eine gezählte Schleife?

Initialisiere einen Zähler, lass eine while gegen ihn laufen und aktualisiere ihn im Body: let mut i = 0; while i < 10 { ...; i = i + 1 }. Die Mutability-Syntax ist in pre-1.0 Zero noch im Fluss, schau also in die aktuelle Doku nach der genauen Schreibweise – das Muster while + Zähler + Update ist aber das Standard-Idiom für gezählte Schleifen.

Gibt es break oder continue in Zero?

Die meisten Sprachen aus Zeros Familie liefern ein Konstrukt zum frühen Verlassen einer Schleife; die exakte Schreibweise in pre-1.0 Zero gehört zu den Bereichen, die sich vor 1.0 noch ändern könnten. Der konservative Ansatz ist, die Schleife so zu strukturieren, dass die Bedingung selbst die Arbeit erledigt – aktualisiere die Bedingung, damit die Schleife natürlich endet – statt sich auf ein spezielles Kontrollfluss-Schlüsselwort zu verlassen.

Kann eine Zero-While-Schleife unendlich laufen?

Ja – while true { ... } ist eine Endlosschleife. Nützlich für Server, Event-Loops, REPLs und alles ohne natürliches Abbruchkriterium. Anders als bei impliziten Wahrheitswerten ist true hier ein Literal vom Typ bool, also bleibt die Bedingung typkonform.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S