Do...Loop — Instrukcja (Visual Basic)
Powtarza blok instrukcji, gdy Boolean
warunek jest True
lub do momentu, aż warunek stanie się True
.
Składnia
Do [ { While | Until } condition ]
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop
' -or-
Do
[ statements ]
[ Continue Do ]
[ statements ]
[ Exit Do ]
[ statements ]
Loop [ { While | Until } condition ]
generatora
Termin | Definicja |
---|---|
Do |
Wymagany. Uruchamia definicję Do pętli. |
While |
Nie można podać, jeśli Until jest używany. Powtarzaj pętlę, dopóki condition nie ma parametru False . |
Until |
Nie można podać, jeśli While jest używany. Powtarzaj pętlę, dopóki condition nie ma parametru True . |
condition |
Opcjonalny. Boolean Wyrażenie. Jeśli condition element to Nothing , Visual Basic traktuje go jako False . |
statements |
Opcjonalny. Co najmniej jedna instrukcja powtarzana w czasie lub do czasu condition to True . |
Continue Do |
Opcjonalny. Przenosi kontrolkę do następnej Do iteracji pętli. |
Exit Do |
Opcjonalny. Przenosi kontrolkę poza pętlę Do . |
Loop |
Wymagany. Przerywa definicję Do pętli. |
Uwagi
Do...Loop
Użyj struktury, jeśli chcesz powtórzyć zestaw instrukcji w nieskończoność, dopóki warunek nie zostanie spełniony. Jeśli chcesz powtórzyć instrukcje określoną liczbę razy, dla ... Następna instrukcja jest zwykle lepszym wyborem.
Możesz użyć polecenia While
lub Until
, aby określić condition
parametr , ale nie oba te elementy. Jeśli żadna z nich nie zostanie nadana, pętla będzie kontynuowana, dopóki Exit
kontrolka transferu nie zostanie wyjęła z pętli.
Możesz przetestować condition
tylko jeden raz na początku lub na końcu pętli. Jeśli testujesz condition
na początku pętli (w instrukcji Do
), pętla może nie działać nawet raz. Jeśli testujesz na końcu pętli (w instrukcji Loop
), pętla zawsze jest uruchamiana co najmniej raz.
Warunek zwykle wynika z porównania dwóch wartości, ale może to być dowolne wyrażenie, które daje w wyniku wartość typu danych logicznych (True
lub False
). Obejmuje to wartości innych typów danych, takich jak typy liczbowe, które zostały przekonwertowane na Boolean
.
Pętle można zagnieżdżać Do
, umieszczając jedną pętlę w innej. Można również zagnieżdżać różne rodzaje struktur sterujących w sobie. Aby uzyskać więcej informacji, zobacz Zagnieżdżone struktury kontrolek.
Uwaga
Struktura Do...Loop
zapewnia większą elastyczność niż while... End While, ponieważ umożliwia podjęcie decyzji, czy zakończyć pętlę po condition
zatrzymaniuTrue
, czy po raz pierwszy staje się .True
Umożliwia również testowanie condition
na początku lub na końcu pętli.
Zakończ pracę
Instrukcja Exit Do może zapewnić alternatywny sposób zakończenia działania .Do…Loop
Exit Do
przenosi kontrolkę natychmiast do instrukcji, która jest zgodna z instrukcją Loop
.
Exit Do
jest często używany po ocenie pewnego warunku, na przykład w If...Then...Else
strukturze. Możesz chcieć zamknąć pętlę, jeśli wykryjesz warunek, który sprawia, że iteracja jest niepotrzebna lub niemożliwa, na przykład błędna wartość lub żądanie zakończenia. Jednym z nich Exit Do
jest przetestowanie warunku, który może spowodować nieskończoną pętlę, czyli pętlę, która może uruchamiać dużą lub nawet nieskończoną liczbę razy. Możesz użyć Exit Do
polecenia , aby uciec od pętli.
Możesz uwzględnić dowolną liczbę instrukcji Exit Do
w dowolnym miejscu w obiekcie Do…Loop
.
W przypadku użycia w zagnieżdżonych Do
pętlach Exit Do
transferuje kontrolę poza pętlę najbardziej wewnętrzną i do następnego wyższego poziomu zagnieżdżania.
Przykład 1
W poniższym przykładzie instrukcje w pętli będą nadal działać, dopóki zmienna index
nie będzie większa niż 10. Klauzula Until
znajduje się na końcu pętli.
Dim index As Integer = 0
Do
Debug.Write(index.ToString & " ")
index += 1
Loop Until index > 10
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Przykład 2
W poniższym przykładzie użyto While
klauzuli zamiast Until
klauzuli i condition
testowano na początku pętli, a nie na końcu.
Dim index As Integer = 0
Do While index <= 10
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Przykład 3
W poniższym przykładzie zatrzymuje pętlę, condition
gdy zmienna index
jest większa niż 100. Instrukcja If
w pętli powoduje Exit Do
jednak zatrzymanie pętli przez instrukcję, gdy zmienna indeksu jest większa niż 10.
Dim index As Integer = 0
Do While index <= 100
If index > 10 Then
Exit Do
End If
Debug.Write(index.ToString & " ")
index += 1
Loop
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10
Przykład 4
Poniższy przykład odczytuje wszystkie wiersze w pliku tekstowym. Metoda OpenText otwiera plik i zwraca element StreamReader , który odczytuje znaki. Do...Loop
W warunku metoda StreamReader
określa, Peek czy istnieją jakieś dodatkowe znaki.
Private Sub ShowText(ByVal textFilePath As String)
If System.IO.File.Exists(textFilePath) = False Then
Debug.WriteLine("File Not Found: " & textFilePath)
Else
Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)
Do While sr.Peek() >= 0
Debug.WriteLine(sr.ReadLine())
Loop
sr.Close()
End If
End Sub