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 counter ilk değeri. |
end |
Gerekli. Sayısal ifade. öğesinin counter son 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 For Next 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 For
yerleş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ş For
iç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 sonundaFinally
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
For
Bir ...Next
döngüsü başlatıldığında, Visual Basic , end
ve step
değerlerini değerlendirirstart
. Visual Basic bu değerleri yalnızca şu anda değerlendirir ve sonra öğesine counter
atarstart
. Deyim bloğu çalışmadan önce, Visual Basic ile end
karşı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 counter
step
deyimine For
döner. Yine ile karşılaştırır counter
end
ve 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 end
kadar counter
durmaz. değerine eşitse counter
end
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 değerini counter
değiştirirseniz kodunuzun okunup hata ayıklaması daha zor olabilir. , end
veya step
değerinin start
değ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ü , end ve 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
,Decimal
Single
veyaDouble
.Enum Deyimi kullanarak bildirdiğiniz bir numaralandırma.
Bir
Object
.T
İfadede kullanılabilecek bir tür olan aşağıdaki işleçlereB
sahip birBoolean
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 counter
Next
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
, end
ve step
ifadeleri türüne genişleyen herhangi bir veri türünü counter
değerlendirebilir. için counter
kullanıcı tanımlı bir tür kullanıyorsanız, , end
veya step
counter
türlerini start
tü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