Soru Tarihi
For...Next döngüsü, Visual Basic'in ilk sürümlerinden beri mevcuttur ve değerler aralığını döngüyle geçmek için kullanılır, genellikle diziler ve koleksiyonlarla çalışmak için kullanılır. VB.NET'te daha sıkı bir sayaç ve adım desteği (Step) eklenmiştir.
Sorun
Klasik hata, döngü sayaç değişkeninin (örneğin, i) değerini değiştirmek, bu da yanlış davranışa yol açar: sayaç her iterasyonun sonunda otomatik olarak artar/azalır. Koleksiyonları döngüye alırken sınırları doğru bir şekilde belirlemek de önemlidir (örneğin, For i = 0 To arr.Length - 1).
Çözüm
Her zaman değişmeyen sayaçlar kullanın veya koleksiyon döngü içinde değişebileceği için üst sınır doğrulamasını bir değişkene koyun. Döngü gövdesinde sayaç değişkenini açıkça değiştirmeyin.
Kod örneği:
Dim arr() As Integer = {1, 2, 3, 4} For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next
Anahtar özellikler:
Döngü gövdesinde sayaç manuel olarak değiştirilirse ne olur?
Değer yalnızca mevcut iterasyon içinde gerçekten değişir, ancak iterasyonun sonunda Visual Basic otomatik olarak artırma/azaltma yapacak, bu da tahmin edilemeyen geçiş sayısına yol açacaktır.
For i = 1 To 5 If i = 3 Then i = 1 Console.WriteLine(i) Next
For...Next, List(Of T) gibi koleksiyonları döngüyle geçmek için kullanılabilir mi?
Evet, ama değişen boyutlarla hata yapmamak için koleksiyonlar için For Each kullanımına tercih edilmelidir. For...Next sadece indeksleri saklar.
Pozitif adımda üst sınır alt sınırdan küçükse ne olur?
Döngü hiç çalışmayacaktır.
For i = 5 To 1 ' Step yok - döngü çalışmayacak ... Next
Belirli bir öğe bulunduğunda sayaç elle değiştirildi, gelecekteki öğeleri atlamak için çabalarken bazı iterasyonların atlanmasına ve sonsuz döngüye yol açtı.
Artılar:
Eksiler:
Koşulları kontrol etmek için ayrı bir değişken kullanmak, döngüdeki sayaca müdahale etmemek.
Artılar:
Eksiler: