Perulangan


Perintah For...Next
Salah satu keunggulan komputer dibandingkan dengan manusia adalah dapat mengerjakan sesuatu secara berulang-ulang tanpa mengalami penurunan kualitas terhadap hasil kerja.

Salah satu perintah perulangan di Visual Basic ada For…Next Statements yang merupakan perulangan dengan menggunakan sistem counter dengan menggunakan syntax sebagai berikut :


For counter [ As datatype ] = start To end [ Step step ]
   [ statements ]
[ Exit For ]
   [ statements ]
Next [ counter ]

Contoh :

Dim I As Integer
For I = 1 To 100              'Defaultnya Step 1
      Console.WriteLine(I)
Next I
Atau
For I As Integer = 1 To 100         'Defaultnya Step 1
      Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan 1 s/d 100

Catatan :

Dari segi looping pemakaian :

Dim I As Integer
For I = 1 To 100              'Defaultnya Step 1
      Console.WriteLine(I)
Next I

Tidak berbeda dengan

For I As Integer = 1 To 100         'Defaultnya Step 1
      Console.WriteLine(I)
Next I

Tapi jika ditinjau dari lingkup pemakaian variabel, maka variabel I pada contoh pertama adalah variabel local Sub Main, sedangkan variabel I pada contoh kedua adalah variable local untuk blok looping.

Contoh :

Dim I As Integer
For I = 1 To 100              'Defaultnya Step 1
      Console.WriteLine(I)
Next I
Console.WriteLine(I)          'Akan tercetak 101

Sedangkan

For I As Integer = 1 To 100         'Defaultnya Step 1
      Console.WriteLine(I)
Next I
Console.WriteLine(I)          'Terjadi error pada saat kompilasi

Dimana pesan error adalah error BC30451: Name I is not declared.

Dim I As Integer
For I = 1 To 100 Step 2
      Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan ganjil 1 s/d 99

Catatan : Step tidak selamanya harus berupa bilangan bulat, tetapi juga dapat berupa bilangan floating point.

For I As Single = 1 To 10 Step 0.1
      Console.WriteLine(I)
Next I


Akan mencetak daftar bilangan 1, 1.1, 1.2, 1.3, …,10

Bagaimana dengan perulangan dari besar ke kecil ?
Perulangan dari besar ke kecil dapat dilakukan dengan menentukan nilai Step negatif.

Contoh :
For I As Integer = 100 To 1 Step -1
      Console.WriteLine(I)
Next I

Akan mencetak daftar bilangan 100, 99. 98, …, 1

Dapatkah anda menerangkan fungsi dan contoh pemakaian Exit For ?
Exit For merupakan perintah keluar dari looping tanpa bersyarat, artinya kalau perintah Exit For ditemukan maka proses program dilanjutkan ke perintah dibawah Next.

Adapun contoh pemakaian Exit For adalah misalnya kita ingin membuat password dengan jumlah kesempatan coba sebanyak 3 kali.

Option Explicit On
Imports System
Module ModPass
  Sub Main()
      Dim I As Integer
      Dim Pass As String
      For I = 1 To 3 Step 1
          Console.Write("Password :")
          Pass = Console.ReadLine()
          If Pass.ToUpper() ="INDOPROG" Then    'Jika Password Benar
             Exit For                           'Keluar dari Looping
          End If
      Next I
      If I > 3 Then
         Console.WriteLine("Proses Login Gagal !")
      Else
         Console.WriteLine("Welcome !")
      End If
  End Sub
End Module

Perintah Do...Loop
Jika perintah For … Next melakukan looping berdasarkan counter, maka perintah Do … Loop melakukan looping berdasarkan kondisi, adapun tata cara penulisannya adalah sebagai berikut :

Do { While | Until } condition
   [ statements ]
[ Exit Do ]
   [ statements ]
Loop

Atau

Do
   [ statements ]
[ Exit Do ]
   [ statements ]
Loop { While | Until } condition

Catatan :

Perbedaan antara kedua struktur perulangan diatas adalah posisi pemeriksaan kondisi yang akan diuji, pada struktur yang pertama pengujian kondisi dilakukan sebelum statements dikerjakan, sedangkan pada struktur yang kedua pengujuan dilakukan setelah statement dikerjakan.

Sebagaimana dengan Exit For, perintah Exit Do akan mengakhiri Looping tanpa bersyarat, yang artinya jika perintah Exit Do ditemukan, maka proses Looping akan segera dihentikan dan dilanjutkan ke Statement dibawah Loop.

Contoh :

Option Explicit On
Imports System
Module DoLoop
   Sub Main()
       Dim Dat() As Integer
       Dim Jd,DTemp As Integer
       Jd = 0
       Do
         Console.Write("Data Ke-{0} :", Jd+1)
         DTemp = Console.ReadLine()
         If DTemp <> 0 Then
            ReDim Preserve Dat(Jd)
            Dat(Jd) = DTemp
            Jd+=1
         End If
       Loop Until DTemp = 0         'Ulangi sampai Dtemp diisi 0
       For I As Integer = 0 To Jd-1
           Console.WriteLine("Data Ke-{0} adalah {1}",I+1, Dat(I))
       Next I
   End Sub
End Module

Catatan :

Pada contoh diatas, mula-mula kita mendeklarasikan suatu array tanpa diikuti dengan ukuran, kemudian proses akan dilanjutkan dengan pembacaan data ke variabel Dtemp, dab jika nilai Dtemp bukan 0 (nol), maka ukuran array akan dialokasi ulang dengan perintah ReDim Preserve yang akan mempertahankan isi array, dan pembacaan data akan terus diulang sampai Dtemp diisi dengan 0 (nol).

Selain struktur Do…Loop, juga tersedia perintah perulangan dengan tata cara penulisan sebagai berikut.
 
While condition
   [ statements ]
End While

Pada prinsipnya struktur While … End While sama dengan Do While … Loop.

Perintah For Each...Next
Perintah For Each…Next digunakan untuk melakukan iterasi berdasarkan collection tertentu, misalnya kita ingin mencetak semua elemen dalam suatu array, penulisan dengan perintah For Each dapat dilakukan sebagai berikut :

For Each element [ As datatype ] In group
   [ statements ]
[ Exit For ]
   [ statements ]
Next [ element ]

Contoh :

Option Explicit On
Imports System
Module DoLoop
   Sub Main()
       Dim Dat() As Integer
       Dim Jd,DTemp As Integer
       Jd = 0
       Do
         Console.Write("Data Ke-{0} :", Jd+1)
         DTemp = Console.ReadLine()
         If DTemp <> 0 Then
            ReDim Preserve Dat(Jd)
            Dat(Jd) = DTemp
            Jd+=1
         End If
       Loop Until DTemp = 0
       For Each Data As Integer In Dat
           Console.WriteLine("Data pada array {0}", Data)
       Next
   End Sub
End Module

Catatan :

Array pada Visual Basic merupakan collection pada System.Array, sehingga pemakaian perintah For Each akan mendapatkan elemen 0 s/d element terakhir dari array.