Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengulangi sekelompok pernyataan saat penghitung perulangan mendekati nilai akhirnya.
Sintaksis
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Bagian
| Bagian | Deskripsi |
|---|---|
counter |
Diperlukan dalam pernyataan For. Variabel numerik. Variabel kontrol untuk loop. Untuk informasi selengkapnya, lihat Kontra Argumen nanti dalam topik ini. |
datatype |
Fakultatif. Jenis data dari counter. Untuk informasi selengkapnya, lihat Kontra Argumen nanti dalam topik ini. |
start |
Dibutuhkan. Ekspresi numerik. Nilai awal counter. |
end |
Dibutuhkan. Ekspresi numerik. Nilai akhir dari counter. |
step |
Fakultatif. Ekspresi numerik. Jumlah yang counter bertambah setiap kali melalui perulangan. |
statements |
Fakultatif. Satu atau beberapa pernyataan antara For dan Next yang dijalankan sejumlah kali yang ditentukan. |
Continue For |
Fakultatif. Mentransfer kontrol ke iterasi berikutnya dari perulangan. |
Exit For |
Fakultatif. Memindahkan kendali keluar dari perulangan For . |
Next |
Dibutuhkan. Mengakhiri definisi dari perulangan For. |
Nota
Kata To kunci digunakan dalam pernyataan ini untuk menentukan rentang untuk penghitung. Anda juga dapat menggunakan kata kunci ini di Select... Case Statement dan deklarasi array. Untuk informasi selengkapnya tentang deklarasi array, lihat Pernyataan Dim.
Contoh Sederhana
Anda menggunakan Forstruktur ...Next ketika Anda ingin mengulangi serangkaian pernyataan beberapa kali.
Dalam contoh berikut, variabel index dimulai dengan nilai 1 dan ditingkatkan dengan setiap perulangan, berakhir setelah nilai index mencapai 5.
For index As Integer = 1 To 5
Debug.Write(index.ToString & " ")
Next
Debug.WriteLine("")
' Output: 1 2 3 4 5
Dalam contoh berikut, number variabel dimulai pada 2 dan dikurangi sebesar 0,25 pada setiap perulangan perulangan, berakhir setelah nilai number mencapai 0. Argumen Step-.25 mengurangi nilai sebesar 0,25 pada setiap perulangan.
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
Tip
Pernyataan While...End While atau Pernyataan Do...Loop berfungsi dengan baik ketika Anda tidak tahu terlebih dahulu berapa kali untuk menjalankan pernyataan dalam perulangan. Namun, ketika Anda berharap untuk menjalankan perulangan beberapa kali tertentu, perulangan For...Next adalah pilihan yang lebih baik. Anda menentukan jumlah iterasi saat pertama kali memasukkan perulangan.
Perulangan Berlapis
Anda dapat menyarangkan For perulangan dengan menempatkan satu perulangan di dalam perulangan lainnya. Contoh berikut menunjukkan struktur berlapis For...Next yang memiliki nilai langkah yang berbeda. Perulangan luar membuat string pada setiap iterasi. Perulangan dalam mengurangi variabel penghitung perulangan untuk setiap iterasi perulangan.
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
Saat menyarangkan perulangan, setiap perulangan harus memiliki variabel unik counter .
Anda juga dapat menumpuk berbagai jenis struktur kontrol di dalam satu sama lain. Untuk informasi selengkapnya, lihat Struktur Kontrol Tertumpuk.
Keluar Dari dan Lanjutkan Dari
Pernyataan Exit For segera keluar dari For...
Next loop dan memindahkan kendali ke pernyataan yang mengikuti Next.
Pernyataan Continue For mentransfer kontrol segera ke iterasi berikutnya dalam perulangan. Untuk informasi selengkapnya, lihat Lanjutkan Pernyataan.
Contoh berikut mengilustrasikan penggunaan pernyataan Continue For dan Exit For.
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
Anda dapat menempatkan sejumlah Exit For pernyataan dalam For...
Next Loop. Ketika digunakan dalam nested For...
Next loop, Exit For keluar dari loop paling dalam dan mentransfer kontrol ke tingkat sarang berikutnya yang lebih tinggi.
Exit Forsering digunakan setelah Anda mengevaluasi beberapa kondisi (misalnya, dalam ...IfThen...Else struktur). Anda mungkin ingin menggunakan Exit For untuk kondisi berikut:
Melanjutkan iterasi tidak perlu atau tidak mungkin. Nilai yang salah atau permintaan penghentian mungkin membuat kondisi ini.
A
Try...Catch...Finallyperintah menangkap pengecualian. Anda dapat menggunakanExit Fordi akhirFinallyblok.Anda memiliki perulangan tanpa akhir, yaitu perulangan yang dapat berjalan dalam jumlah besar atau bahkan tak terbatas kali. Jika Anda mendeteksi kondisi seperti itu, Anda dapat menggunakan
Exit Foruntuk menghindari perulangan. Untuk informasi selengkapnya, lihat Pernyataan Do...Loop.
Implementasi Teknis
Ketika perulangan For...Next dimulai, Visual Basic mengevaluasi start, , enddan step. Visual Basic mengevaluasi nilai-nilai ini hanya saat ini lalu menetapkan start ke counter. Sebelum blok pernyataan berjalan, Visual Basic membandingkan counter dengan end. Jika counter sudah lebih besar dari end nilai (atau lebih kecil jika step negatif), perulangan For berakhir dan kontrol diteruskan ke pernyataan yang mengikuti Next pernyataan. Jika tidak, blok pernyataan akan dijalankan.
Setiap kali Visual Basic menemukan pernyataan Next, itu meningkatkan counter berdasarkan step dan kembali ke pernyataan For. Sekali lagi counter dibandingkan dengan end, dan sekali lagi blok dijalankan atau perulangan dihentikan, tergantung pada hasilnya. Proses ini berlanjut hingga counter melewati end atau pernyataan Exit For ditemui.
Perulangan tidak berhenti sampai counter melewati end. Jika counter sama dengan end, perulangan berlanjut. Perbandingan yang menentukan apakah akan menjalankan blok adalah counter<= end jika step positif dan counter>= end jika step negatif.
Jika Anda mengubah nilai counter saat berada di dalam perulangan, kode Anda mungkin lebih sulit dibaca dan di-debug. Mengubah nilai start, , endatau step tidak memengaruhi nilai iterasi yang ditentukan saat perulangan pertama kali dimasukkan.
Jika Anda menyarangkan perulangan, pengkompilasi menandakan kesalahan jika menjumpai Next pernyataan tingkat berlapis luar sebelum Next pernyataan tingkat dalam. Namun, pengkompilasi dapat mendeteksi kesalahan yang tumpang tindih ini hanya jika Anda menentukan counter di setiap Next pernyataan.
Argumen Langkah
Nilai step dapat berupa positif atau negatif. Parameter ini menentukan pemrosesan perulangan sesuai dengan tabel berikut:
| Nilai langkah | Perulangan dijalankan jika |
|---|---|
| Positif atau nol |
counter
<= end |
| Negatif |
counter
>= end |
Nilai default step adalah 1.
Argumen Balik
Tabel berikut menunjukkan apakah counter menentukan variabel lokal baru yang cakupannya mencakup seluruh perulangan For…Next. Penentuan ini tergantung pada apakah datatype ada dan apakah counter sudah ditentukan.
Apakah datatype ada? |
Apakah counter sudah didefinisikan? |
Hasil (apakah counter mendefinisikan variabel lokal baru yang berlaku untuk seluruh For...Next perulangan) |
|---|---|---|
| Tidak. | Ya | Tidak, karena counter sudah ditentukan. Jika cakupan counter tidak bersifat lokal untuk prosedur, akan muncul peringatan pada saat kompilasi. |
| Tidak. | Tidak. | Ya. Jenis data ditentukan dari ekspresi start, end, dan step. Untuk informasi tentang inferensi jenis, lihat Pernyataan Inferensi Opsi dan Inferensi Jenis Lokal. |
| Ya | Ya | Ya, tetapi hanya jika variabel yang ada counter didefinisikan di luar prosedur. Variabel itu tetap terpisah. Jika cakupan variabel yang ada counter bersifat lokal untuk prosedur, kesalahan waktu kompilasi terjadi. |
| Ya | Tidak. | Ya. |
Jenis counter data menentukan jenis iterasi, yang harus menjadi salah satu jenis berikut:
A
Byte,SByte,UShort,Short,UInteger,Integer,ULong,Long,Decimal,Single, atauDouble.Enumerasi yang Anda nyatakan dengan menggunakan Pernyataan Enum.
Sebuah
Object.Jenis
Tyang memiliki operator berikut, di manaBadalah jenis yang dapat digunakan dalamBooleanekspresi.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
Anda dapat secara opsional menentukan counter variabel dalam Next pernyataan. Sintaks ini meningkatkan keterbacaan program Anda, terutama jika Anda memiliki perulangan berlapis For . Anda harus menentukan variabel yang muncul dalam pernyataan For yang sesuai.
Ekspresi start, end, dan step dapat mengevaluasi ke jenis data apa pun yang melebar ke jenis counter. Jika Anda menggunakan jenis yang ditentukan pengguna untuk counter, Anda mungkin harus menentukan CType operator konversi untuk mengonversi jenis start, end, atau step ke jenis counter.
Contoh 1
Contoh berikut menghapus semua elemen dari daftar generik. Alih-alih Untuk Setiap... Pernyataan Berikutnya, contoh menunjukkan For...Next pernyataan yang berulang dalam urutan turun. Contoh menggunakan teknik ini karena removeAt metode menyebabkan elemen setelah elemen yang dihapus memiliki nilai indeks yang lebih rendah.
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
Contoh 2
Contoh berikut berulang melalui enumerasi yang dideklarasikan dengan menggunakan Pernyataan Enum.
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
Contoh 3
Dalam contoh berikut, parameter pernyataan menggunakan kelas yang memiliki overload operator untuk operator +, -, >=, dan <=.
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