Bagikan melalui


Untuk... Berikutnya (Visual Basic)

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...Finally perintah menangkap pengecualian. Anda dapat menggunakan Exit For di akhir Finally blok.

  • 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 For untuk 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, atau Double.

  • Enumerasi yang Anda nyatakan dengan menggunakan Pernyataan Enum.

  • Sebuah Object.

  • Jenis T yang memiliki operator berikut, di mana B adalah jenis yang dapat digunakan dalam Boolean ekspresi.

    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

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

Lihat juga