6. Perulangan

Perulangan/Looping

Struktur Kontrol

Pada pembahasan logika percabangan di pertemuan sebelumnya, kita telah mengetahui fungsi struktur kontrol. Struktur kontrol membuat developer bisa untuk mengeksekusi sebagian penggalan kode program, dan tidak mengeksekusi sebagian yang lain.

Di tutorial kali ini, kita akan membahas jenis lain dari struktur kontrol pada PHP: yaitu perulangan.

Fungsi Perulangan

Pada tutorial tentang variabel PHP, kita telah mencoba membuat array lalu menampilkan salah satu item dari array tersebut dengan menggunakan indeks.

Nah, pertanyaannya, jika array tersebut memiliki ratusan atau ribuan item, bagaimana kita akan menampilkannya?

Apakah kita akan menulis perintah echo sebanyak jumlah item pada array tersebut?

Oke, itu kalau kita tahu jumlah item pada array tersebut. Kalau tidak tahu, bagaimana?

Di sini lah kenapa kita membutuhkan perulangan!

Gambar 1: ilustrasi. Sumber gambar: link.

Dengan blok kode perulangan, kita bisa membuat suatu statement atau perintah dalam PHP dengan satu kali tulis. Untuk kemudian kita biarkan sistem yang akan menjalankannya berulang kali.

Misal kita ingin menampilkan tulisan: “Saya berjanji tidak akan mengulangi lagi” sebanyak 100 kali. Kita cukup menggunakan satu perintah echo saja, lalu kita masukkan kode tersebut ke dalam blok kode perulangan, dan mengaturnya agar sistem mengeksekusinya sebanyak 100 kali. Keren bukan?

Lalu, pertanyaannya adalah: bagamaina caranya?

Jenis-Jenis metode perulangan pada PHP

Sebelum menjawab pertanyaan tersebut. Kita ketahui dulu bahwa di dalam PHP, terdapat beberapa metode perulangan yang bisa kita gunakan. Mulai dari:

  • perulangan for
  • perulangan while
  • perulangan do-while
  • perulangan foreach
  • purulangan rekursif

Pada tutorial ini kita akan mencobanya satu-persatu.

Perulangan for

Perulangan for adalah perulangan yang paling simpel. Kita bisa menggunakan metode ini dengan menentukan jumlah perulangan yang kita inginkan. Misalkan saya ingin menampilkan tulisan “Saya berjanji tidak akan mengulangi” sebanyak 100x, saya bisa melakukannya seperti ini:

<?php

for ($i = 0; $i < 100; $i++) {
    echo "Saya berjanji tidak akan mengulangi <br>";
}

Perulangan for membutuhkan 3 buah ekspresi yang mana ekspresi tersebut masing-masing dipisahkan oleh tanda titik koma (;).

Penjelasan:

  • ekspresi pertama digunakan untuk menginisialisasi variabel
  • ekspresi kedua digunakan untuk boolean statement, yang mana perulangan akan terus dilakukan selama statemen ini bernilai true
  • ekspresi ketiga adalah suatu aksi yang akan selalu dijalankan setiap kali satu perulangan telah selesai dilakukan.

Contoh-contoh yang lain dari perulangan for:

<?php

# inisialisasi variabel tidak harus dari angka 0
for ($i = 1; $i <= 10; $i++) {
    echo "Perulangan ke-{$i} <br>";
}

Kita juga bisa menggunakan nama variabel sesuka kita:

<?php

for ($x = 1; $x < 11; $x++) {
    echo "Nilai x = {$x} <br>";
}

Kita juga bisa menggunakan kelipatan lebih dari 1:

<?php

for ($i = 2; $i < 100; $i += 2) {
    echo "Nilai i = {$i} <br>";
}

Atau hitung mundur:

<?php

for ($i = 10; $i > 0; $i--) {
    echo "Nilai i = {$i} <br>";
}

Atau perulangan di dalam perulangan:

<?php

# kode program ini akan menampilkan * dalam bentuk persegi
# dengan ukuran 5x5
for ($i = 0; $i < 5; $i++) {
    for ($j = 0; $j < 5; $j++) {
        echo "* ";
    }

    echo "<br>";
}

Menampilkan Array

Kita juga bisa menampilkan seluruh isi dari suatu array menggunakan perulangan for.

Kita bisa mengetahui panjang dari suatu array dengan perintah count(array).

<?php

$listMahasiswa = ['Nurul Huda', 'Wahid Abdullah', 'Elmo Bachtiar'];

for ($i = 0; $i < count($listMahasiswa); $i++) {
    echo "Nama: {$listMahasiswa[$i]} <br>";
}

Perintah Break dan Continue

Kita bisa men-skip satu step perulangan dengan perintah continue. Kita juga bisa memberhentikan proses perulangan dengan perintah break sebelum ia sampai pada iterasi yang terakhir.

Perhatikan contoh berikut:

<?php

# inisialisasi variabel tidak harus dari angka 0
for ($i = 1; $i <= 50; $i++) {
    if ($i % 10 === 0) {
      continue; # skip perulangan jika nilai $i habis dibagi 10
    }
    
    echo "Perulangan ke-{$i} <br>";

    if ($i > 40) {
      break; # hentikan perulangan jika $i lebih dari 20
    }
}

Contoh di atas akan men-skip pada setiap kelipatan 10. Dan dia juga akan berhenti secara paksa sebelum variabel $i kurang dari atau sama dengan 50.

Dengan mempraktikkan contoh-contoh di atas, kita sekarang sudah memahami dan juga punya gambaran yang jelas tentang bagaimana cara kerja perulangan for di dalam bahasa pemrograman PHP.

Perulangan while

Jenis perulangan yang kedua adalah perulangan while.

Ia hampir sama dengan for. Akan tetapi ia lebih ditujukan untuk kasus-kasus di mana kita tidak mengetahui secara pasti ada berapa jumlah perulangan yang harus dilakukan.

Contohnya adalah: ketika kita membuat game seperti Flappy Bird, maka kita akan selalu menggambar pipa baru selama user belum mati.

Kondisi “selama user belum mati”, membuat kita tidak benar-benar tahu berapa kali pipa baru akan di-generate dan ditampilkan pada layar. Bisa jadi 100 kali, 500 kali atau bahkan hanya 3 kali saja.

Nah, dalam kasus-kasus yang tidak jelas seperti itu, perulangan yang cocok untuk kita gunakan adalah perulangan while.

Berikut ini adalah contoh penggunaan while while:

<?php

$i = 0;

# perulangan ini akan dilakukan selama nilai $i kurang dari 20.
while ($i < 20) {
    echo "Perulangan ke-{$i} <br>";

    $i++;
}

Penjelasan:

Perulangan while hanya menerima satu ekspresi saja: yaitu ekspresi boolean. Di mana perintah yang ada di dalam blok kode while, akan senantiasa dilakukan secara berulang-ulang selama ekspresi boolean tersebut bernilai true.

Perulangan tanpa batas yang jelas

Contoh berikut akan menampilkan nilai $i selama ia bukan kelipatan 3. Dan kita akan mengubah nilai $i secara random pada setiap perulangan dilakukan.

Silakan praktikkan kode berikut, lalu refresh halaman berkali-kali (kita tidak tahu berapa kali sistem akan melakukan perulangan yang kita minta).

<?php

# kita mulai dari angka 1
$i = 1;

# perulangan akan dilakukan selama variabel $i bukan kelipatan 3
while ($i % 3 !== 0) {
    echo "Nilai i = {$i} <br>";

    # ubah nilai $i secara random dari angka 1-100
    $i = rand(1, 100);
}

Perulangan tanpa batas dengan while

Dengan perulangan while, kita bisa memerintahkan sistem untuk melakukan perulangan tanpa batas.

Bagaimana bisa? Itu bisa terjadi jika ekspresi boolean yang kita tulis selalu bernilai true. Entah nilai true secara langsung, atau nilai true yang tidak langsung misalkan ekspresi: 1 > 0 (satu lebih dari nol).

NB: Jangan lakukan! Ini hanya ilustrasi:

<?php

while (true) {
    echo "Jangan lakukan ini, atau PC anda akan macet!! <br>";
}

Perintah Break dan Continue

Sama seperti for, dengan while kita juga bisa men-skip suatu perulangan dengan perintah continue. Dan kita juga bisa memberhentikan proses perulangan sebelum ia mencapai akhir, dengan perintah break;

Perhatikan contoh berikut:

<?php

# kita mulai dari angka 1
$i = 1;

# perulangan akan dilakukan selama variabel $i bukan kelipatan 3
while ($i % 3 !== 0) {
    if ($i % 5 === 0) {
      # skip ke perulangan selanjutnya jika $i adalah kelipatan 5
      # jangan lupa di-random dulu agar tidak terjadi perulangan tanpa batas
      $i = rand(1, 500);
      continue; 
    }

    echo "Nilai i = {$i} <br>";

    if ($i > 50 && $i < 60) {
        break; # jika $i bernilai lebih dari 50 dan kurang dari 60 maka stop paksa
    }

    # ubah nilai $i secara random dari angka 1-500
    $i = rand(1, 500);
}

Dengan mempraktikkan contoh-contoh di atas, seharusnya kita sekarang sudah memahami bagaimana cara kerja while di dalam bahasa pemrograman PHP.

Perulangan do while

Perulangan do ... while sama persis dengan perulangan while. Ia sama-sama mengevaluasi ekspresi boolean. Selama ekspresi tersebut bernilai true, perulangan akan terus dilakukan. Dan jika nilai boolean tersebut false, perulangan akan dihentikan.

Bedanya hanya satu:

  • Kalau dalam metode while, ekspresi boolean akan diperiksa terlebih dahulu sebelum memulai perulangan.
  • Ada pun dengan do ... while, ia akan mengeksekusi perulangan terlebih dahulu, baru setelah itu ia akan mengevaluasi kondisi boolean.

Apa konsekuensinya?

  • Pada while, jika kondisi pertama kali bernilai false, perulangan tidak akan dieksekusi sama sekali.
  • Sedangkan pada do...while, perulangan akan tetap dilakukan satu kali jika kondisi pertama sudah bernilai false.

Agar lebih jelas, perhatikan dan coba contoh berikut:

<?php

while (false) {
    echo "Perulangan ke-1 dengan while! <br>";
}

do {
    echo "Perulangan ke-1 dengan do while! <br>";
} while (false);

Pada kode program di atas, perintah di dalam perulangan while sama sekali tidak dieksekusi, karena ekspresi boolean-nya bernilai false.

Sedangkan dalam perulangan do ... while, perintah tersebut akan dieksekusi terlebih dahulu, baru setelah itu ia akan mengevaluasi kondisi boolean, jika true dia akan melakukan perulangan selanjutnya, dan jika tidak, dia akan berhenti.

Perulangan Foreach

Jenis perulangan selanjutnya adalah menggunakan foreach. Jenis perulangan ini khusus untuk tipe data array baik array asosiatif mau pun array terindeks.

Kita bisa melakukan perulangan pada setiap elemen array tanpa harus tahu berapa panjang dari array itu sendiri.

Sintaksnya ada dua versi, kita bisa menggunakan yang mana saja sesuai dengan kebutuhan.

Sintaks singkat

Sintaks perulangan foreach versi singkat adalah sebagai berikut:

<?php

$listMahasiswa = ['Nurul Huda', 'Wahid Abdullah', 'Elmo Bachtiar'];

foreach ($listMahasiswa as $mahasiswa) {
    echo "Nama : {$mahasiswa} <br>";
}

Penjelasan:

  • Perulangan foreach (versi singkat) hanya menerima 2 buah variabel yang dipisahkan kata kunci as
  • Variabel pertama adalah variabel bertipe data array
  • Dan variabel kedua adalah variabel item dari array tersebut

Kelebihan menggunakan foreach:

  • Sintaks lebih singkat dari pada perulangan for untuk menampilkan array
  • Item array per-indeks sudah disimpan dalam satu variabel sehingga kita tidak perlu memanggil indeksnya lagi

Sintaks lengkap

Nah, untuk sintaks foreach versi lengkap. Kita ketambahan beberapa ekspresi yaitu tanda => dan variabel $key (nama variabelnya bebas).

Untuk lebih jelasnya silakan perhatikan kode program berikut:

<?php

$listMahasiswa = ['Nurul Huda', 'Wahid Abdullah', 'Elmo Bachtiar'];

foreach ($listMahasiswa as $key => $mahasiswa) {
    echo "[{$key}] Nama : {$mahasiswa} <br>";
}

Penjelasan:

  • Sintaks foreach versi lengkap ketambahan tanda => dan satu variabel
  • Variabel $key di dalam kode program di atas berisi nilai indeks dari iterasi yang sedang dilakukan
  • Variabel $key bisa menggunakan nama bebas.

Kelebihan:

  • Dengan menggunakan sintaks lengkap, kita bisa mengetahui urutan iterasi dari perulangan yang sedang dilakukan.
  • Sehingga kita bisa memanfaatkannya untuk proses pengkondisian tertentu.

Perulangan Rekursif

Jenis perulangan terakhir yang bisa kita gunakan dalam bahasa pemrograman PHP adalah: perulangan rekursif.

Semua metode perulangan yang telah kita coba di atas adalah metode perulangan iteratif. Sifatnya sama: yaitu melakukan perulangan pertama, kedua, ketiga, dan seterusnya.

Berbeda dengan perulangan rekursif yang memiliki cara kerja yang sangat berbeda.

Ia dikatakan rekursif karena perulangannya yang tidak “berhenti”. Ia adalah fungsi yang senantiasa memanggil dirinya sendiri.

Sebagai ilustrasi, bayangkan kita memiliki 2 buah cermin. Lalu kita letakkan 2 cermin tersebut saling berhadapan.

Apa yang akan terjadi? Bayangan yang dihasilkan akan saling berpantulan tanpa akhir, bukan?

Atau, sebagai ilustrasi yang lain: misalkan kita me-remote komputer yang sedang me-remote kita dengan Team Viewer. Kita akan mendapatkan hasil yang kira-kira seperti efek cermin tadi:

Gambar 2: ilustrasi fungsi rekursif. Sumber gambar: link.

Untuk perulangan rekursif, kita akan mempelajarinya pada pembahasan tersendiri yaitu: Belajar Fungsi Rekursif PHP.

Pembahasan Selanjutnya

Pada tutorial selanjutnya, insyaallah kita akan membahas tentang Fungsi. Fungsi adalah suatu kumpulan baris kode untuk melakukan suatu tugas tertentu. Yang mana tugas tersebut bisa kita eksekusi berkali-kali di banyak tempat yang berbeda.

Lebih jelasnya: langsung saja buka pembahasan tentang Belajar Fungsi pada PHP.

Oiya, jangan lupa share seri belajar PHP dasar ini, ya!

Terima kasih banyak.