Aracılığıyla paylaş


For...Next Deyimi (Visual Basic)

Bir deyim grubunu belirtilen sayıda yineler.

Sözdizimi

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

Parça

Bölüm Açıklama
counter Deyiminde For gereklidir. Sayısal değişken. Döngü için denetim değişkeni. Daha fazla bilgi için bu konunun devamında yer alan Sayaç Bağımsız Değişkeni bölümüne bakın.
datatype isteğe bağlı. veri türü counter. Daha fazla bilgi için bu konunun devamında yer alan Sayaç Bağımsız Değişkeni 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 isteğe bağlı. Sayısal ifade. Döngü boyunca her seferinde artırılan miktar counter .
statements isteğe bağlı. ve arasında ForNext belirtilen sayıda çalışan bir veya daha fazla deyim.
Continue For isteğe bağlı. Denetimi bir sonraki döngü yinelemesine aktarır.
Exit For isteğe bağlı. Aktarımlar denetimi döngünün For dışına aktarır.
Next Gerekli. Döngünün For tanımını sonlandırır.

Not

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. Dizi bildirimleri hakkında daha fazla bilgi için bkz . Dim Deyimi.

Basit Örnekler

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

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 Süre... End While Deyimi veya Do... Döngü deyimini döngüde kaç kez çalıştırabileceğinizi önceden bilmediğinizde Döngü Deyimi 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 geri döndürü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

deyimi Exit For hemen . For..Next döngüsü ve denetimi deyimini izleyen deyime Next aktarır.

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

Aşağıdaki örnekte ve Exit For deyimlerinin Continue For kullanımı gösterilmektedir.

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

Herhangi bir sayıda Exit For deyimi bir For...Next Döngü. İç içe yerleştirilmiş Foriçinde kullanıldığında ...Next döngüler, Exit For en içteki döngüden çıkar ve denetimi bir sonraki üst 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 deyimi bir özel durum yakalar. Bloğun sonunda Finally kullanabilirsinizExit For.

  • Sonsuz bir döngüye sahipsiniz. Bu döngü, çok sayıda hatta sonsuz sayıda çalıştırabilen 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 bkz . Do... Döngü Deyimi.

Teknik Uygulama

ForBir ...Next döngüsü başlatıldığında, Visual Basic , endve stepdeğerlerini değerlendirirstart. Visual Basic bu değerleri yalnızca şu anda değerlendirir ve sonra öğesine counteratarstart. Deyim bloğu çalışmadan önce, Visual Basic ile endkarşılaştırırcounter. Değerden daha büyükse counter (veya negatifse daha küçüksestep), For döngü sona erer ve denetim deyimini izleyen Next deyime geçer.end Aksi takdirde, deyimi bloğu çalışır.

Visual Basic deyimiyle her karşılaştığında Next , artarak counterstep deyimine For döner. Yine ile karşılaştırır counterendve sonuğa bağlı olarak bloğu çalıştırır veya döngüden çıkar. Bu işlem, geçiş yapılana end veya bir Exit For deyimle karşılaşılana kadar counter devam eder.

döngüsü geçirilene endkadar counter durmaz. değerine eşitse counterenddöngü devam eder. Bloğun çalıştırılıp çalıştırılmayacağını belirleyen karşılaştırma = counterend<pozitifse step ve counter>= end negatifse.step

Bir döngünün içindeyken değerini counter değiştirirseniz kodunuzun okunup hata ayıklaması daha zor olabilir. , endveya step değerinin startdeğiştirilmesi, döngüye ilk girildiğinde belirlenen yineleme değerlerini etkilemez.

Döngüleri iç içe yerleştirdiğinizde derleyici, iç düzeyin deyiminden önce Next bir dış iç içe düzey deyimiyle karşılaşırsa Next hata sinyali gönderir. Ancak, derleyici bu çakışan hatayı yalnızca her Next deyimde belirtirseniz counter algılayabilir.

Adım Bağımsız Değişkeni

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ü yürütülür
Pozitif veya sıfır counter<= end
Olumsuz counter>= end

varsayılan değeri step 1'dir.

Sayaç Bağımsız Değişkeni

Aşağıdaki tabloda, döngünün tamamına For…Next göre kapsamı belirlenmiş yeni bir yerel değişkenin tanımlanıp tanımlanmadığı counter gösterilir. 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ı For...Next kapsamındaki yeni bir yerel değişkeni tanımlayıp counter tanımlamadığı)
Hayır Evet Hayır, çünkü counter zaten tanımlanmıştır. kapsamı counter yordamın yerel değilse, derleme zamanı uyarısı oluşur.
Hayır Hayır Evet. Veri türü , endve step ifadelerinden startçıkarılır. Tür çıkarımı hakkında bilgi için bkz . Option Infer Deyimi ve Yerel Tür Çıkarımı.
Yes Yes 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ı yordam için yerelse, derleme zamanı hatası oluşur.
Yes Hayır 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, DecimalSingleveya Double.

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

  • Bir Object.

  • T İfadede kullanılabilecek bir tür olan aşağıdaki işleçlere B sahip bir Boolean tü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 deyiminde counterNext değişkeni 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, endve step ifadeleri türüne genişleyen herhangi bir veri türünü counterdeğerlendirebilir. için counterkullanıcı tanımlı bir tür kullanıyorsanız, , endveya stepcountertürlerini starttürüne dönüştürmek için dönüştürme işlecini tanımlamanız CType gerekebilir.

Örnek 1

Aşağıdaki örnek, genel bir listeden tüm öğeleri kaldırır. Her biri için yerine. .. Sonraki Deyim, örnekte azalan düzende yineleyen bir For...Next deyimi gösterilir. 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 bkz.