Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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...Finallyifadesi bir özel durum yakalar. Bloğun sonundaExit ForkullanabilirsinizFinally.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 start'ı counter'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,SingleveyaDouble.Enum Deyimi kullanarak bildirdiğiniz bir numaralandırma.
Bir
Object.T, aşağıdaki işleçlerle birlikte kullanılan veBifadesinde kullanılabilecek birBooleantürüdür.Public Shared Operator >= (op1 As T, op2 As T) As BPublic Shared Operator <= (op1 As T, op2 As T) As BPublic Shared Operator - (op1 As T, op2 As T) As TPublic 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