Do...Loop 문(Visual Basic)

Boolean 조건이 True인 동안 또는 조건이 True될 때까지 문 블록을 반복합니다.

구문

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 ]

부분

용어 정의
Do 필수입니다. Do 루프의 정의를 시작합니다.
While Until을 사용할 경우 지정할 수 없습니다. conditionFalse가 될 때까지 루프를 반복합니다.
Until While을 사용할 경우 지정할 수 없습니다. conditionTrue가 될 때까지 루프를 반복합니다.
condition 선택 사항. Boolean 식입니다. conditionNothing이면 Visual Basic은 이를 False로 처리합니다.
statements 선택 사항. conditionTrue가 될 때까지 반복되는 하나 이상의 문은 다음과 같습니다.
Continue Do 선택 사항. Do 루프의 다음 반복으로 컨트롤을 전송합니다.
Exit Do 선택 사항. Do 루프에서 제어를 전송합니다.
Loop 필수입니다. Do 루프의 정의를 종료합니다.

설명

조건이 충족될 때까지 문 집합을 무한수로 반복하려는 경우 Do...Loop 구조를 사용합니다. 지정된 횟수만큼 문을 반복하려면 일반적으로 For...Next 문이 더 나은 선택입니다.

While 또는 Until를 사용하거나 condition을 지정할 수 있지만 둘 다 지정할 수는 없습니다. 둘 다 제공하지 않으면 루프에서 Exit 전송 제어가 실행될 때까지 루프가 계속됩니다.

루프의 시작 또는 끝에서 한 번만 condition을 테스트 할 수 있습니다. 루프 시작 시(Do 문에서) condition을 테스트하는 경우 루프가 한 번도 실행되지 않을 수 있습니다. 루프의 끝에서 테스트하는 경우(Loop 문에서) 루프는 항상 한 번 이상 실행됩니다.

조건은 일반적으로 두 값의 비교에서 발생하지만 부울 데이터 형식 값(True 또는False)으로 계산되는 식일 수 있습니다. 여기에는 숫자 형식과 같이 Boolean로 변환된 다른 데이터 형식의 값이 포함됩니다.

하나의 루프를 다른 루프 내에 배치하여 Do 루프를 중첩할 수 있습니다. 서로 다른 종류의 컨트롤 구조를 중첩할 수도 있습니다. 자세한 내용은 중첩된 컨트롤 구조를 참조하세요.

참고 항목

Do...Loop 구조는 conditionTrue가 되는 것을 멈출 때 루프를 종료할지, 아니면 True이 되는 때를 결정할 수 있기 때문에 While...End While 문보다 더 많은 유연성을 제공합니다. 또한 루프의 시작 또는 끝에서 condition을 테스트할 수 있습니다.

Exit Do

Exit Do 문은 Do…Loop을 종료하는 다른 방법을 제공할 수 있습니다. Exit DoLoop 문 뒤에 있는 문으로 제어를 즉시 전송합니다.

Exit DoIf...Then...Else 구조체와 같이 일부 조건이 평가된 후에 자주 사용됩니다. 잘못된 값이나 종료 요청과 같이 반복을 계속할 필요가 없거나 불가능하게 만드는 조건을 감지하는 경우 루프에서 나갈 수 있습니다. Exit Do의 한 가지 사용은 무한 루프를 발생시킬 수 있는 조건을 테스트하는 것입니다. 이 루프는 많은 횟수 또는 무한히 실행될 수도 있습니다. 루프를 탈출하는 데 Exit Do을 사용할 수 있습니다.

Do…Loop에 있는 임의의 수의 Exit Do 문을 포함할 수 있습니다.

중첩된 Do 루프 내에서 사용되는 경우 Exit Do은 가장 안쪽 루프에서 다음 상위 수준의 중첩으로 컨트롤을 전송합니다.

예 1

다음 예제에서는 index 변수가 10보다 클 때까지 루프의 문이 계속 실행됩니다. Until 절은 루프의 끝에 있습니다.

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 

예제 2

다음 예제에서는 Until 절 대신 While 절을 사용하며 condition은 루프 끝이 아닌 시작 시 테스트됩니다.

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 

예 3

다음 예제에서는 index 변수가 100보다 크면 condition이 루프를 중지합니다. 그러나 루프의 If 문은 인덱스 변수가 10보다 크면 Exit Do 문이 루프를 중지하도록 합니다.

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 

예시 4

다음 예제에서는 텍스트 파일의 모든 줄을 읽습니다. OpenText 메서드는 파일을 열고 문자를 읽는 StreamReader를 반환합니다. Do...Loop 조건에서 StreamReaderPeek 메서드는 추가 문자가 있는지 여부를 결정합니다.

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

참고 항목