For...Next Deyimi (Visual Basic)

Bir deyim grubunu belirtilen sayıda yineler.

Syntax

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

Bölümler

Bölüm Description
counter deyiminde For gereklidir. Sayısal değişken. Döngü için denetim değişkeni. Daha fazla bilgi için bu konunun devamlarında yer alan Sayaç Bağımsız Değişkeni'ne bakın.
datatype İsteğe bağlı. veri counter türü. Daha fazla bilgi için bu konunun devamlarında yer alan Sayaç Bağımsız Değişkeni'ne bakın.
start Gereklidir. Sayısal ifade. İlk counter değeri.
end Gereklidir. Sayısal ifade. değerinin son counter değeri.
step İsteğe bağlı. Sayısal ifade. Döngüde counter her zaman artırılır miktarı.
statements İsteğe bağlı. ile arasında belirtilen sayıda For Next çalıştıran bir veya daha fazla deyim.
Continue For İsteğe bağlı. Denetimi bir sonraki döngü yinelemeye iletir.
Exit For İsteğe bağlı. Aktarımlar döngüden For çıkma denetimi.
Next Gereklidir. Döngü tanımını For sonlandırılır.

Not

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

Basit Örnekler

Bir dizi deyimi birkaç kez tekrarlamak istediğiniz For ... yapısını Next kullanırsiniz.

Aşağıdaki örnekte, değişkeni 1 değeriyle başlar ve her döngü yinelemesi ile artırılır ve değeri index index 5'e ulaştıktan sonra biter.

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

Aşağıdaki örnekte, değişkeni 2 ile başlar ve döngüde her yinelemede 0,25 azaltıldı ve değeri number number 0'a ulaştıktan sonra sona erdi. bağımsız Step -.25 değişkeni, döngünin 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ü Deyimi, döngüde deyimleri kaç kez çalıştıracaklarını önceden bilmiyorken iyi çalışır. Ancak, döngüyü belirli bir sayıda çalıştırmayı beklediğinizde... For döngüsü daha iyi bir Next seçenektir. Döngüyü ilk kez girerken yineleme sayısını belirlersiniz.

Döngüleri İç İçe Yerleştirme

Bir döngüyü For başka bir döngüye koyarak döngüleri iç içe koyarak iç içe geçmiş olur. Aşağıdaki örnek, farklı adım For değerlerine Next sahip iç içe ... yapılarını gösterir. Dış döngü, döngüdeki her yineleme için bir dize oluşturur. İç döngü, döngüyü her yinelemesi için bir döngü sayacı değişkenlerini yok sayıyor.

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ştirmede her döngü benzersiz bir değişkene sahip counter olmalıdır.

Ayrıca farklı türlerde denetim yapılarını iç içe de iç içe yerleştirmeyi de s içe siniz. Daha fazla bilgi için bkz. İç İçe Denetim Yapıları.

Için Çıkış ve Devam

deyiminden Exit For hemen For çıkar...Next döngü ve denetimi deyimini izleyen deyime Next iletir.

deyimi, Continue For denetimi döngüyü hemen bir sonraki yinelemeye iletir. Daha fazla bilgi için bkz. Continue Deyimi.

Aşağıdaki örnek, ve deyimlerinin Continue For Exit For 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

herhangi bir sayıda Exit For deyimini ... For``Next Döngü. İç içe geçmiş içinde For kullanılırken...Next döngüler, Exit For en içteki döngüden çıkar ve denetimi iç içe yerleştirmenin sonraki üst düzeyine iletir.

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

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

  • A Try ... Catch ...Finally deyimi bir özel durumu yakalar. Bloğun Exit For sonunda Finally kullanabilirsiniz.

  • Sonsuz bir döngüye sahipsiniz. Bu döngü, çok sayıda hatta sonsuz sayıda çalıştıracak bir döngüyü ifade eder. Böyle bir koşul algılarsanız, döngüden kaçış Exit For için kullanabilirsiniz. Daha fazla bilgi için bkz. Do... Döngü Deyimi.

Teknik Uygulama

Bir For ... döngüsü Next başladığında, Visual Basic start , ve end 'i step değerlendirir. Visual Basic şu anda yalnızca bu değerleri değerlendirir ve ardından 'a start counter atar. Deyim bloğu çalıştırılamadan önce Visual Basic ile counter end karşılaştırıldığında. zaten değerden büyükse (veya negatifse daha küçükse), döngü sona erer ve denetim counter end step For deyimini izleyen deyime Next geçer. Aksi takdirde deyim bloğu çalışır.

Her Visual Basic deyimiyle Next karşılaştığında, değerini artırır counter step ve deyimine For geri döner. Yine ile karşılaştırıldığında, yine sonucuna bağlı olarak bloğu çalıştırır veya counter end döngüden çıkar. Bu işlem başarılı olana counter veya end bir deyimiyle Exit For karşılaşana kadar devam eder.

döngüsü geçirilene kadar counter end durmaz. eşittir counter ise end döngü devam eder. Bloğun çalıştırıp çalıştırılamay olmadığını belirleyen counter <= end karşılaştırma, pozitif step ve counter >= end negatif step ise karşılaştırmadır.

Bir döngü içinde counter while değerini değiştirirsanız, kodunuzu okumak ve hata ayıklamak daha zor olabilir. , veya start end değerinin değiştirilmesi, döngü ilk step kez girilirken belirlenen yineleme değerlerini etkilemez.

Döngüleri iç içe alırsanız, derleyici iç düzeyin deyiminden önce iç içe geçmiş bir dış düzeyin deyimiyle karşılaşırsa Next Next bir hatayla karşılaşır. Ancak, derleyici bu çakışan hatayı yalnızca her deyimde counter belirttiğinizde Next algılanabilir.

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

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

Adım değeri Döngü şu şekilde yürütülür:
Pozitif veya sıfır counter <= end
Negatif counter >= end

step varsayılan değeri 1'dir.

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

Aşağıdaki tablo, kapsamı counter döngüyü tamamen kapsleyen yeni bir yerel değişkeni tanımladığına işaret For…Next eder. Bu belirleme, mevcut olup datatype olmadığı ve önceden tanımlanmış olup olmadığını counter bağlıdır.

Var datatype mı? Zaten counter tanımlanmış mı? Sonuç counter (tüm döngü kapsamındaki yeni bir yerel değişkeni tanımp For...Next tanımlamaz)
Hayır Yes Hayır, counter zaten tanımlanmış. Öğesinin kapsamı, counter yordamda yerel değilse, bir derleme zamanı uyarısı oluşur.
Hayır Hayır Evet. Veri türü start ,, end ve step ifadelerinden algılanır. Tür çıkarımı hakkında daha fazla bilgi için bkz. Option Infer deyimleri ve Yerel tür çıkarımı
Yes Yes Evet, ancak yalnızca varolan counter değişken yordamın dışında tanımlanmışsa. Bu değişken ayrı kalır. Varolan counter değişkenin kapsamı yordamın yerelse, bir 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:

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

  • Bir enum ifadesinikullanarak bildirdiğiniz bir sabit listesi.

  • Bir Object .

  • TAşağıdaki işleçlere sahip bir tür, burada B bir ifadede kullanılabilecek bir tür Boolean .

    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

Bu değişkeni isteğe bağlı olarak counter Next deyimde belirtebilirsiniz. Bu sözdizimi, özellikle iç içe döngüler varsa programınızın okunabilirliğini geliştirir For . Karşılık gelen ifadede görünen değişkeni belirtmeniz gerekir For .

start, end Ve ifadeleri, step türü widens olan herhangi bir veri türünü değerlendirebilir counter . İçin Kullanıcı tanımlı bir tür kullanırsanız,, counter CType veya türlerini türüne dönüştürmek için dönüştürme işlecini tanımlamanız gerekebilir start end step counter .

Örnek 1

Aşağıdaki örnek, genel bir listeden tüm öğeleri kaldırır. Her biri için bir değil... Next Ifadesindeörnek, For azalan düzende yinelenen bir... Next ifadesini gösterir. Bu örnek, removeAt yöntemi kaldırılan öğeden sonra öğelerin daha düşük bir dizin değerine sahip olmasına neden olduğundan 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, bir sabit listesi bildirimikullanılarak tanımlanan bir numaralandırma aracılığıyla 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, ifade 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.