Aracılığıyla paylaş


İçin... Sonraki Deyim (Visual Basic)

Döngü değişkeni son değerine yaklaşırken bir grup deyimi tekrarlar.

Sözdizimi

For counter [ As datatype ] = start To end [ Step step ]
    [ statements ]
    [ Continue For ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

Parçalar

Bölüm Açıklama
counter For ifadesinde gereklidir. Sayısal değişken. Döngü için denetim değişkeni. Daha fazla bilgi için bu konunun ileri bölümlerinde Karşı Argüman bölümüne bakın.
datatype Opsiyonel. veri türü counter. Daha fazla bilgi için bu konunun ileri bölümlerinde Karşı Argüman bölümüne bakın.
start Gerekli. Sayısal ifade. öğesinin counterilk değeri.
end Gerekli. Sayısal ifade. öğesinin counterson değeri.
step Opsiyonel. Sayısal ifade. Döngü boyunca her seferinde artırılan miktar counter .
statements Opsiyonel. Bir veya daha fazla ifade, belirtilen sayıda çalıştırılacak şekilde For ve Next arasında yer alır.
Continue For Opsiyonel. Denetimi bir sonraki döngü yinelemesine aktarır.
Exit For Opsiyonel. Döngünün For dışına kontrolü aktarır.
Next Gerekli. Döngünün For tanımını sonlandırır.

Uyarı

anahtar To sözcüğü, sayacın aralığını belirtmek için bu deyimde kullanılır. Bu anahtar sözcüğü Seç... Case Deyimi ve dizi bildirimlerinde de kullanabilirsiniz. Dizi bildirimleri hakkında daha fazla bilgi için bkz. Dim Deyimi.

Basit Örnekler

Bir deyim kümesini birkaç kez yinelemek istediğinizde bir ...For yapısı kullanırsınızNext.

Aşağıdaki örnekte index değişken 1 değeriyle başlar ve döngünün her yinelemesiyle artırılır ve değeri index 5'e ulaştıktan sonra sona erer.

For index As Integer = 1 To 5
    Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5

Aşağıdaki örnekte number değişken 2'de başlar ve döngünün her yinelemesinde 0,25 azaltılır ve değeri number 0'a ulaştıktan sonra sona erer. Step bağımsız değişkeni -.25, döngünün her yinelemesinde değeri 0,25 azaltır.

For number As Double = 2 To 0 Step -0.25
    Debug.Write(number.ToString & " ")
Next
Debug.WriteLine("")
' Output: 2 1.75 1.5 1.25 1 0.75 0.5 0.25 0 

İpucu

Bir While... End While Deyimi veya Do... Loop Deyimi, döngüde ifadeleri kaç kez çalıştıracağınızı önceden bilmediğinizde iyi çalışır. Ancak, döngünün belirli bir sayıda çalıştırılmasını beklediğiniz zaman, For...Next döngüsü daha iyi bir seçimdir. Döngüye ilk girdiğinizde yineleme sayısını belirlersiniz.

döngüleri iç içe geçirme

Bir döngünün içine başka bir döngü koyarak döngüleri iç içe For yerleştirebilirsiniz. Aşağıdaki örnek, farklı adım değerlerine sahip iç içe Foryerleştirilmiş ...Next yapılarını gösterir. Dış döngü, döngünün her yinelemesi için bir dize oluşturur. İç döngü, döngünün her yinelemesi için bir döngü sayacı değişkenini azaltır.

For indexA = 1 To 3
    ' Create a new StringBuilder, which is used
    ' to efficiently build strings.
    Dim sb As New System.Text.StringBuilder()

    ' Append to the StringBuilder every third number
    ' from 20 to 1 descending.
    For indexB = 20 To 1 Step -3
        sb.Append(indexB.ToString)
        sb.Append(" ")
    Next indexB

    ' Display the line.
    Debug.WriteLine(sb.ToString)
Next indexA
' Output:
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2
'  20 17 14 11 8 5 2

Döngüleri iç içe yerleştirdiğinizde, her döngü benzersiz counter bir değişkene sahip olmalıdır.

Ayrıca, farklı tür denetim yapılarını da iç içe yerleştirebilirsiniz. Daha fazla bilgi için bkz. İç İçe Denetim Yapıları.

Için Çıkış ve Devam Et

Exit For deyimi hemen çıkış yapar For. Next döngüsünden çıkar ve denetimi Next deyimini izleyen deyime aktarır.

Bu Continue For deyimi, denetimi hemen döngüdeki bir sonraki yinelemesine aktarır. Daha fazla bilgi için bkz. Continue İfadesi.

Aşağıdaki örnek, Continue For ve Exit For ifadelerinin kullanımını göstermektedir.

For index As Integer = 1 To 100000
    ' If index is between 5 and 7, continue
    ' with the next iteration.
    If index >= 5 AndAlso index <= 8 Then
        Continue For
    End If

    ' Display the index.
    Debug.Write(index.ToString & " ")

    ' If index is 10, exit the loop.
    If index = 10 Then
        Exit For
    End If
Next
Debug.WriteLine("")
' Output: 1 2 3 4 9 10

Bir Exit For içerisine herhangi bir sayıda For deyimi konulabilir. Next döngü. İç içe yerleştirilmiş Foriçinde kullanıldığında ... Next döngüleri, Exit For en içteki döngüden çıkar ve kontrolü bir üst seviyedeki iç içe yerleştirme düzeyine aktarır.

Exit For genellikle bazı koşulları değerlendirdikten sonra kullanılır (örneğin, bir If...Then...Else yapısına) bakın. Aşağıdaki koşullar için kullanmak Exit For isteyebilirsiniz:

  • Yinelemeye devam etmek gereksiz veya imkansızdır. Hatalı bir değer veya sonlandırma isteği bu koşulu oluşturabilir.

  • Bir Try...Catch...Finally ifadesi bir özel durum yakalar. Bloğun sonunda Exit For kullanabilirsiniz Finally.

  • Sonsuz bir döngü vardır. Bu, çok sayıda ya da sonsuz defa çalışabilen bir döngüdür. Böyle bir koşul algılarsanız, döngüden kaçmak için kullanabilirsiniz Exit For . Daha fazla bilgi için Do... Döngü İfadesi bölümüne bakın.

Teknik Uygulama

ForBir ...Next döngüsü başlatıldığında, Visual Basic, start, end ve step değerlerini değerlendirir. Visual Basic bu değerleri yalnızca o anda değerlendirir ve ardından startcounter'e atar. Deyim bloğu çalışmadan önce, Visual Basic counter ve end ile karşılaştırır. Eğer counter, end değerinden zaten büyükse (ve step negatifse daha küçükse), For döngüsü sona erer ve kontrol, Next deyimini izleyen deyime geçer. Aksi takdirde, ifade bloğu çalıştırılır.

Visual Basic her Next deyimiyle karşılaştığında, counter değerini step artırır ve For deyimine geri döner. Yine counter ile end'i karşılaştırır ve sonuca bağlı olarak bloğu çalıştırır veya döngüden çıkar. Bu işlem, counter, end geçene veya bir Exit For deyimle karşılaşılana kadar devam eder.

counter end geçmedikçe döngü durmaz. Eğer counterend'e eşitse, döngü devam eder. Bloğun çalıştırılıp çalıştırılmayacağını belirleyen karşılaştırma counter<= end pozitifse step ve counter>= end negatifse step.

Bir döngünün içindeyken counter değerini değiştirirseniz kodunuzu okumak ve hata ayıklamak daha zor olabilir. , startveya end değerinin stepdeğiştirilmesi, döngüye ilk girildiğinde belirlenen yineleme değerlerini etkilemez.

Döngüleri iç içe yerleştirdiğinizde derleyici, Next bir iç düzey deyiminden önce dış bir iç içe düzey Next deyimiyle karşılaşırsa hata rapor eder. Derleyici, bu çakışan hatayı yalnızca her bir counter deyimde Next belirttiğinizde algılayabilir.

Adım Argümanı

değeri step pozitif veya negatif olabilir. Bu parametre, döngü işlemeyi aşağıdaki tabloya göre belirler:

Adım değeri Döngü eğer yürütülürse
Pozitif veya sıfır counter <= end
Olumsuz counter >= end

step varsayılan değeri 1'dir.

Karşı Argüman

Aşağıdaki tabloda, counter tarafından döngünün tamamında geçerli olacak şekilde yerel bir değişken tanımlanıp tanımlanmadığı belirtilmektedir. Bu belirleme, mevcut olup olmadığına datatype ve önceden tanımlanıp tanımlanmadığına counter bağlıdır.

Var mı datatype ? Zaten tanımlanmış mı counter ? Sonuç (döngünün tamamı kapsamındaki yeni bir yerel değişkeni counter tanımlıyor mu ve bu değişken For...Next tarafından mı oluşturuluyor)
Hayı Evet Hayır, çünkü counter zaten tanımlanmıştır. Eğer counter kapsamı prosedüre yerel değilse, derleme zamanı bir uyarı oluşur.
Hayı Hayı Evet. Veri türü, start, end ve step ifadelerinden çıkarılır. Tür çıkarımı hakkında bilgi için bkz. Option Infer Deyimi ve Yerel Tür Çıkarımı.
Evet Evet Evet, ancak yalnızca mevcut counter değişken yordamın dışında tanımlanmışsa. Bu değişken ayrı kalır. Mevcut counter değişkenin kapsamı yordama yerel ise, derleme sırasında hata oluşur.
Evet Hayı Evet.

veri türü counter , aşağıdaki türlerden biri olması gereken yinelemenin türünü belirler:

  • Bir Byte, SByte, UShort, Short, UInteger, Integer, ULong, Long, Decimal, Single veya Double.

  • Enum Deyimi kullanarak bildirdiğiniz bir numaralandırma.

  • Bir Object.

  • T, aşağıdaki işleçlerle birlikte kullanılan ve B ifadesinde kullanılabilecek bir Boolean türüdür.

    Public Shared Operator >= (op1 As T, op2 As T) As B

    Public Shared Operator <= (op1 As T, op2 As T) As B

    Public Shared Operator - (op1 As T, op2 As T) As T

    Public Shared Operator + (op1 As T, op2 As T) As T

İsteğe bağlı olarak counter deyiminde Next değişkenini belirtebilirsiniz. Bu söz dizimi, özellikle iç içe For döngüleriniz varsa programınızın okunabilirliğini artırır. Karşılık gelen For deyimde görünen değişkeni belirtmeniz gerekir.

start, end ve step ifadeleri, counter türüne genişleyebilen herhangi bir veri türüne değerlendirilebilir. counter için bir kullanıcı tanımlı tür kullanıyorsanız, türlerini CType, start veya end'ten step'e dönüştürmek için counter dönüştürme işlecini tanımlamanız gerekebilir.

Örnek 1

Aşağıdaki örnek, genel bir listeden tüm öğeleri kaldırır. Her Bir...Sonraki Deyimi yerine, örnekte azalan düzende yineleyen bir For...Next deyimi gösterilmektedir. Yöntemi kaldırılan öğeden removeAt sonraki öğelerin daha düşük bir dizin değerine sahip olmasına neden olduğundan, örnek bu tekniği kullanır.

Dim lst As New List(Of Integer) From {10, 20, 30, 40}

For index As Integer = lst.Count - 1 To 0 Step -1
    lst.RemoveAt(index)
Next

Debug.WriteLine(lst.Count.ToString)
' Output: 0

Örnek 2

Aşağıdaki örnek, Enum Deyimi kullanılarak bildirilen bir numaralandırmada yinelenir.

Public Enum Mammals
    Buffalo
    Gazelle
    Mongoose
    Rhinoceros
    Whale
End Enum

Public Sub ListSomeMammals()
    For mammal As Mammals = Mammals.Gazelle To Mammals.Rhinoceros
        Debug.Write(mammal.ToString & " ")
    Next
    Debug.WriteLine("")
    ' Output: Gazelle Mongoose Rhinoceros
End Sub

Örnek 3

Aşağıdaki örnekte, deyim parametreleri +, -, >= ve <= işleçleri için işleç aşırı yüklemeleri olan bir sınıf kullanır.

Private Class Distance
    Public Property Number() As Double

    Public Sub New(ByVal number As Double)
        Me.Number = number
    End Sub

    ' Define operator overloads to support For...Next statements.
    Public Shared Operator +(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
        Return New Distance(op1.Number + op2.Number)
    End Operator

    Public Shared Operator -(ByVal op1 As Distance, ByVal op2 As Distance) As Distance
        Return New Distance(op1.Number - op2.Number)
    End Operator

    Public Shared Operator >=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
        Return (op1.Number >= op2.Number)
    End Operator

    Public Shared Operator <=(ByVal op1 As Distance, ByVal op2 As Distance) As Boolean
        Return (op1.Number <= op2.Number)
    End Operator
End Class

Public Sub ListDistances()
    Dim distFrom As New Distance(10)
    Dim distTo As New Distance(25)
    Dim distStep As New Distance(4)

    For dist As Distance = distFrom To distTo Step distStep
        Debug.Write(dist.Number.ToString & " ")
    Next
    Debug.WriteLine("")

    ' Output: 10 14 18 22 
End Sub

Ayrıca bakınız