Die Schleife Do...Loop ermöglicht die Wiederholung eines Codeblocks mit flexibleren Beendigungsbedingungen als For (die sich auf einen Zähler stützt) oder While (bei der die Bedingung immer am Anfang geprüft wird). In Visual Basic gibt es vier Hauptvarianten der Syntax:
' Eingangskontrolle Do While condition ' Schleifenkörper Loop ' Ausgangskontrolle Do ' Schleifenkörper Loop While condition ' Analog auch mit Until: Do Until condition ' Schleifenkörper Loop Do ' Schleifenkörper Loop Until condition
Die Verwendung von Do...Loop ist sinnvoll, wenn:
Frage: Was passiert, wenn die Bedingung condition in der Schleife Do While condition zunächst falsch ist? Wird der Schleifenkörper überhaupt einmal ausgeführt?
Antwort: Nein, der Schleifenkörper wird überhaupt nicht ausgeführt, da die Überprüfung VOR der ersten Ausführung erfolgt.
Beispiel:
Dim i As Integer = 10 Do While i < 5 Console.WriteLine(i) i += 1 Loop ' Es wird keine Zeile ausgegeben.
Geschichte
In der Phase des Datenparsing verwendete der Entwickler die Schleife
Do Until reader.EndOfStream, innerhalb derer eine Zeile aus einer Datei gelesen wurde. Da jedochEndOfStreamnur nach dem Versuch, über das Ende der Datei hinaus zu lesen, wahr wird, wurde die letzte Zeile nicht verarbeitet. Der richtige Weg: Verwenden SieDo While Not reader.EndOfStreamoder verarbeiten Sie die Lesevorgänge zeilenweise und beenden Sie die Schleife anhand der EOF-Bedingung.
Geschichte
Bei der Migration von Code von For zu Do...Loop wurde eine Schleife ohne explizite Inkrementierung der Zählervariablen im Schleifenkörper implementiert. Infolgedessen ging das Programm in eine Endlosschleife, da die Beendigungsbedingung niemals eintrat. Es ist immer notwendig, die Änderung von Schlüsselvariablen innerhalb des Do...Loop-Körpers zu überwachen.
Geschichte
In einem der Berichtssysteme verwendete der Programmierer verschachtelte
Do...Loop-Schleifen, ohne die Verschachtelung der Bedingungen fürExit Dozu berücksichtigen: das innereExit Doverließ nur die innere Schleife, nicht beide. Ein kurzfristiger Blockierungsfehler wurde nur im Betrieb bei großen Datenmengen festgestellt.