Perulangan (loop) menjalankan sekelompok pernyataan berkali-kali selama suatu syarat terpenuhi. VB.NET menyediakan For..Next untuk jumlah pengulangan yang diketahui, For Each..Next untuk menelusuri array dan koleksi (collection), serta While..End While dan Do..Loop untuk pengulangan yang bergantung pada kondisi. Topik ini membahas seluruh bentuk tersebut, pengaturan langkah dengan Step, serta pernyataan Exit dan Continue. Tabel pemilihan bentuk di bagian akhir merangkum kapan masing-masing perulangan digunakan.
Perulangan For..Next#
For..Next mengulang blok pernyataan sebanyak jumlah yang sudah diketahui sejak awal. Variabel penghitung (counter) dinyatakan pada For dengan nilai awal dan nilai akhir, dan VB menggerakkan variabel itu setiap kali badan perulangan selesai, sampai nilai akhir tercapai. Nilai akhir bersifat inklusif, sehingga For i As Integer = 1 To 10 menjalankan badan sepuluh kali dengan i bernilai 1 sampai 10. Kata kunci As pada For membuat variabel penghitung hanya berlaku di dalam perulangan tersebut.
Langkah kenaikan diatur dengan Step. Tanpa Step, penghitung bertambah satu, sedangkan Step -1 menurunkan penghitung untuk kebutuhan hitungan mundur. Program berikut mencetak tabel perkalian 7 dengan perataan kolom, lalu mencetak hitungan mundur dari 10 sampai 1 menggunakan Step -1.
Module TabelPerkalian
Sub Main()
For i As Integer = 1 To 10
Console.WriteLine($"7 x {i,2} = {7 * i,3}")
Next
Console.WriteLine()
For mundur As Integer = 10 To 1 Step -1
Console.Write($"{mundur} ")
Next
Console.WriteLine()
End Sub
End Module7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
10 9 8 7 6 5 4 3 2 1 Program di atas dijalankan dengan pola yang dijelaskan pada topik Program Pertama, yaitu proyek console baru dibuat, isi Program.vb diganti dengan kode program di atas, kemudian dotnet run mengeksekusinya.
# tidak-dijalankan
dotnet new console -lang VB -n TabelPerkalian
cd TabelPerkalian
# ganti isi Program.vb dengan kode program di atas
dotnet runPerataan kolom pada contoh tersebut memanfaatkan lebar minimum di dalam interpolasi string, yaitu {i,2} untuk angka dua digit dan {7 * i,3} untuk hasil tiga digit. Hitungan mundur berhenti tepat pada 1 karena Step -1 terus menurunkan penghitung dari 10, sedangkan 0 berada di luar rentang 10 sampai 1.
Exit For dan Continue For#
Exit For menghentikan perulangan seketika dan melanjutkan eksekusi ke pernyataan setelah Next. Continue For melewati sisa badan perulangan dan langsung menuju iterasi berikutnya. Keduanya hampir selalu diletakkan di dalam If karena hanya digunakan pada keadaan tertentu. Pada perulangan bertumpuk, Exit For hanya keluar dari perulangan terdalam tempat pernyataan itu berada.
Bentuk pasangannya tersedia untuk keluarga perulangan lain, yaitu Exit While dan Continue While untuk While..End While, serta Exit Do dan Continue Do untuk Do..Loop. Pola penggunaan Exit yang paling umum adalah menghentikan penelusuran ketika target sudah ditemukan, sedangkan Continue digunakan untuk melewati elemen yang tidak relevan tanpa menghentikan seluruh perulangan. Exit juga dapat menjadi pengaman pada perulangan yang berhentinya bergantung pada kejadian di luar program, misalnya masukan pengguna yang tidak menentu.
Kedua pernyataan ini boleh muncul lebih dari satu kali di dalam perulangan yang sama, dan setiap kemunculannya berlaku untuk perulangan tempat pernyataan itu dituliskan. Bagian berikutnya menerapkan keduanya sekaligus pada penelusuran array, yaitu Exit For untuk berhenti ketika nilai ditemukan dan Continue For untuk melewati nilai yang tidak memenuhi syarat.
Perulangan For Each..Next#
For Each..Next menelusuri setiap elemen array atau koleksi tanpa melibatkan indeks. Variabel elemen mengambil nilai setiap anggota satu per satu sesuai urutan penyimpanan, sehingga jumlah elemen tidak perlu diketahui sebelumnya. Pada array, urutan penelusuran mengikuti urutan indeks dari elemen pertama sampai elemen terakhir. Bentuk ini dipilih ketika nilai awal dan akhir tidak relevan, misalnya saat menghitung atau mencari di dalam sekumpulan data.
Program berikut menelusuri sebuah array nilai ujian dua kali. Penelusuran pertama mencari sebuah nilai dan berhenti lewat Exit For begitu nilai itu ditemukan. Penelusuran kedua menghitung nilai yang memenuhi batas minimal dan melewati sisanya dengan Continue For.
Module RekapNilai
Sub Main()
Dim nilaiUjian() As Integer = {72, 85, 91, 68, 79, 94}
' Pencarian: penelusuran berhenti begitu nilai ditemukan
Dim cari As Integer = 91
Dim ditemukan As Boolean = False
For Each nilai As Integer In nilaiUjian
If nilai = cari Then
ditemukan = True
Exit For
End If
Next
' Rekap: nilai di bawah 75 dilewati dengan Continue For
Dim jumlahMemenuhi As Integer = 0
For Each nilai As Integer In nilaiUjian
If nilai < 75 Then
Continue For
End If
jumlahMemenuhi += 1
Next
If ditemukan Then
Console.WriteLine($"Nilai {cari} ditemukan dalam array")
Else
Console.WriteLine($"Nilai {cari} tidak ada dalam array")
End If
Console.WriteLine($"Nilai minimal 75: {jumlahMemenuhi}")
End Sub
End ModuleNilai 91 ditemukan dalam array
Nilai minimal 75: 4For Each juga menerima koleksi seperti List(Of T). Daftar jadwal piket berikut ditelusuri tanpa indeks sama sekali, dan penambahan anggota baru di kemudian hari tidak mengubah cara penelusurannya.
Module DaftarPiket
Sub Main()
Dim jadwalPiket As New List(Of String) From {"Ali", "Budi", "Citra", "Dewi"}
For Each nama As String In jadwalPiket
Console.WriteLine($"Piket: {nama}")
Next
End Sub
End ModulePiket: Ali
Piket: Budi
Piket: Citra
Piket: DewiPerulangan While dan Do#
While..End While dan Do..Loop mengulang badan selama sebuah kondisi bernilai True, dan jumlah pengulangannya tidak diketahui sejak awal. While selalu memeriksa kondisi sebelum badan dijalankan, sehingga kondisi yang sudah False sejak awal membuat badan tidak dijalankan sama sekali. Do While..Loop memiliki perilaku yang sama persis, sedangkan Do Until..Loop mengulang badan sampai kondisi menjadi True, yaitu kebalikan dari While.
Keluarga Do menyediakan posisi pemeriksaan kedua, yaitu pada Loop di akhir badan. Bentuk Do..Loop While dan Do..Loop Until menjalankan badan lebih dahulu, kemudian memeriksa kondisi, sehingga badan dijamin berjalan minimal satu kali meskipun kondisinya sudah tidak terpenuhi. Tabel berikut merangkum keempat bentuk Do.
| Bentuk | Posisi kondisi | Badan dijalankan minimal |
|---|---|---|
| Do While..Loop | awal badan | tidak berjalan bila kondisi False sejak awal |
| Do Until..Loop | awal badan | tidak berjalan bila kondisi True sejak awal |
| Do..Loop While | akhir badan | satu kali |
| Do..Loop Until | akhir badan | satu kali |
Program berikut menjalankan keempat bentuk perulangan bergantung kondisi dengan angka yang mudah dihitung ulang. Dua perulangan pertama menghitung mundur dari 3 dan menghasilkan keluaran yang identik, sehingga kesejajaran While..End While dan Do While..Loop terlihat jelas. Perulangan ketiga menggandakan nilai 3 sampai melewati 100, sedangkan perulangan keempat menunjukkan badan yang dijalankan sekali meskipun kondisinya sudah False sejak awal.
Module BentukDo
Sub Main()
Console.WriteLine("While..End While:")
Dim mundur As Integer = 3
While mundur >= 1
Console.WriteLine(mundur)
mundur -= 1
End While
Console.WriteLine("Do While..Loop:")
mundur = 3
Do While mundur >= 1
Console.WriteLine(mundur)
mundur -= 1
Loop
Console.WriteLine("Do Until..Loop:")
Dim ganda As Integer = 3
Do Until ganda > 100
Console.WriteLine(ganda)
ganda *= 2
Loop
Console.WriteLine("Do..Loop While:")
Dim percobaan As Integer = 5
Do
Console.WriteLine($"percobaan ke-{percobaan}")
percobaan += 1
Loop While percobaan <= 3
End Sub
End ModuleWhile..End While:
3
2
1
Do While..Loop:
3
2
1
Do Until..Loop:
3
6
12
24
48
96
Do..Loop While:
percobaan ke-5Memilih bentuk perulangan#
Pilihan bentuk perulangan mengikuti sifat masalahnya. Jumlah iterasi yang diketahui sejak awal menunjuk ke For..Next, sedangkan penelusuran seluruh isi array atau koleksi menunjuk ke For Each..Next. Pengulangan yang bergantung pada kejadian di luar program, seperti menunggu sebuah nilai tercapai, cocok untuk While..End While atau Do..Loop. Apabila badan harus dijalankan minimal sekali, gunakan bentuk dengan kondisi pada Loop.
Tabel berikut memeringkas seluruh bentuk beserta situasi yang paling cocok untuk masing-masing.
| Situasi | Bentuk yang tepat |
|---|---|
| Jumlah iterasi diketahui sejak awal | For..Next |
| Menelusuri seluruh elemen array atau koleksi | For Each..Next |
| Mengulang selama kondisi bernilai True | While..End While atau Do While..Loop |
| Mengulang sampai sebuah kondisi terpenuhi | Do Until..Loop |
| Badan wajib dijalankan minimal satu kali | Do..Loop While atau Do..Loop Until |
Dua bentuk terakhir pada tabel berbeda hanya dalam arah logikanya. Do While menegaskan syarat untuk melanjutkan, sedangkan Do Until menegaskan syarat untuk berhenti. Memilih bentuk yang sesuai dengan cara masalah diformulasikan membuat kondisi perulangan mudah dibaca.
Kesalahan umum#
Kesalahan pada perulangan biasanya menyangkut batas iterasi dan kondisi yang tidak bergerak menuju berhenti. Ketiganya di bawah ini disertai penyebab dan perbaikannya.
Nilai akhir To yang dianggap eksklusif#
Pembaca yang terbiasa dengan perulangan gaya C kadang menganggap To bersifat eksklusif seperti i < 10, padahal nilai akhir ikut digunakan. Kelalaian ini muncul saat perulangan digunakan untuk mengindeks array. Array dengan enam elemen memiliki indeks 0 sampai 5, sehingga For i As Integer = 0 To 6 mencoba mengakses indeks 6 yang tidak ada dan memicu IndexOutOfRangeException. Bentuk yang aman adalah For i As Integer = 0 To nilaiUjian.Length - 1, atau menggunakan For Each apabila indeks tidak diperlukan.
Batas atas yang dievaluasi sekali#
Nilai awal, nilai akhir, dan langkah For..Next dihitung satu kali ketika perulangan dimulai. Program berikut mengubah variabel batas di dalam badan, tetapi jumlah iterasinya tetap tiga.
Module BatasPerulangan
Sub Main()
Dim batas As Integer = 3
For i As Integer = 1 To batas
batas = 10
Console.WriteLine($"iterasi {i}, batas sekarang {batas}")
Next
End Sub
End Moduleiterasi 1, batas sekarang 10
iterasi 2, batas sekarang 10
iterasi 3, batas sekarang 10Perulangan tetap berhenti pada iterasi ketiga karena nilai akhir sudah terkunci saat For dijalankan. Apabila jumlah iterasi harus mengikuti perubahan data, gunakan While atau Do yang memeriksa kondisinya pada setiap iterasi.
Langkah nol dan kondisi yang tidak berubah#
Step 0 pada For..Next membuat penghitung tidak pernah maju, sehingga perulangan berjalan tanpa henti. Pada While dan Do, kondisi yang merujuk variabel yang tidak pernah diperbarui di dalam badan menimbulkan masalah yang sama. Saat menulis perulangan, periksa adanya pernyataan yang menggerakkan kondisi menuju berhenti, dan gunakan Exit sebagai pengaman bila perhentian bergantung pada kejadian di luar program.
Ringkasan#
- For..Next mengulang dengan jumlah yang diketahui, nilai akhir To bersifat inklusif, dan Step mengatur kenaikan maupun penurunan penghitung.
- For Each..Next menelusuri array dan koleksi tanpa indeks, sedangkan Exit dan Continue mengatur berhenti lebih awal serta melewati iterasi.
- While..End While dan Do While..Loop memeriksa kondisi di awal, Do Until membalik logikanya, dan bentuk dengan kondisi pada Loop menjamin badan berjalan minimal satu kali.
- Pilihan bentuk mengikuti masalah, yaitu jumlah iterasi yang diketahui, penelusuran koleksi, atau pengulangan bergantung kondisi.
Referensi#
- For…Next Statement — Microsoft Learn — Variabel penghitung, Step, serta Exit For dan Continue For.
- For Each…Next Statement — Microsoft Learn — Penelusuran array dan koleksi tanpa indeks.
- While…End While Statement — Microsoft Learn — Perulangan dengan pemeriksaan kondisi di awal badan.
- Do…Loop Statement — Microsoft Learn — Keempat bentuk Do dengan posisi kondisi awal atau akhir.
- Continue Statement — Microsoft Learn — Pernyataan Continue For, Continue While, dan Continue Do.