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...Finallydeyimi bir özel durumu yakalar. BloğunExit ForsonundaFinallykullanabilirsiniz.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 Foriç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, veyaDouble.Bir enum ifadesinikullanarak bildirdiğiniz bir sabit listesi.
Bir
Object.TAşağıdaki işleçlere sahip bir tür, buradaBbir ifadede kullanılabilecek bir türBoolean.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
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