# Perulangan dengan \`Do-While\`

`do-while` loop adalah salah satu struktur perulangan dalam pemrograman yang memastikan bahwa blok kode di dalamnya dijalankan setidaknya sekali, bahkan jika kondisi perulangan sudah salah (false) pada awalnya. Setelah menjalankan blok kode, kondisi akan diperiksa dan jika benar (true), loop akan berulang kembali.

**Sintaks `do-while` Loop**

Sintaks dasar dari `do-while` loop adalah sebagai berikut:

```php
do {
    // blok kode yang akan dijalankan setidaknya sekali
} while (condition);
```

* **condition**: Kondisi yang diperiksa setelah setiap iterasi. Jika kondisi ini benar (true), maka blok kode di dalam loop akan dijalankan lagi. Jika salah (false), loop akan berhenti.

**Penjelasan dengan Contoh**

**Contoh: Menampilkan Angka dari 1 hingga 10**

```php
$i = 1;
do {
    echo "Angka: $i <br>";
    $i++;
} while ($i <= 10);
```

**Penjelasan:**

1. **Inisialisasi**: `$i = 1`
   * Variabel `$i` diinisialisasi dengan nilai 1 sebelum loop dimulai.
2. **Blok Kode**: `echo "Angka: $i <br>";`
   * Blok kode ini dijalankan setiap kali loop berjalan. Ini akan mencetak nilai `$i`.
3. **Increment**: `$i++`
   * Setelah setiap iterasi, nilai `$i` ditingkatkan dengan 1 (`$i++`).
4. **Kondisi**: `$i <= 10`
   * Setelah menjalankan blok kode, kondisi `$i <= 10` diperiksa. Jika benar, loop akan berulang kembali. Jika salah, loop berhenti.

Loop ini akan berjalan 10 kali, mencetak angka dari 1 hingga 10.

**Contoh Lain**

**Contoh: Menghitung Jumlah Bilangan dari 1 hingga 100**

```php
$jumlah = 0;
$i = 1;
do {
    $jumlah += $i;
    $i++;
} while ($i <= 100);
echo "Jumlah: " . $jumlah;
```

**Penjelasan:**

* **Inisialisasi**: `$i = 1`
* **Blok Kode**: `$jumlah += $i`
  * Setiap iterasi, nilai `$i` ditambahkan ke variabel `$jumlah`.
* **Increment**: `$i++`
* **Kondisi**: `$i <= 100`

Loop ini menjumlahkan semua angka dari 1 hingga 100 dan mencetak totalnya.

**Contoh: Meminta Input Pengguna Hingga Valid**

```php
do {
    $input = readline("Masukkan angka antara 1 dan 10: ");
} while ($input < 1 || $input > 10);
echo "Anda memasukkan angka yang valid: " . $input;
```

**Penjelasan:**

* **Blok Kode**: `$input = readline("Masukkan angka antara 1 dan 10: ");`
  * Setiap iterasi, pengguna diminta untuk memasukkan angka.
* **Kondisi**: `$input < 1 || $input > 10`
  * Loop akan berulang jika input tidak berada dalam rentang 1 hingga 10.

Loop ini akan terus meminta input dari pengguna sampai mereka memasukkan angka yang valid.

#### Perbedaan antara `while` dan `do-while`

1. **Eksekusi Blok Kode**:
   * **while**: Kondisi diperiksa sebelum eksekusi blok kode pertama kali. Jika kondisi salah pada awalnya, blok kode tidak akan pernah dijalankan.
   * **do-while**: Blok kode dijalankan setidaknya sekali sebelum kondisi diperiksa.
2. **Sintaks**:
   * **while**:

     ```php
     while (condition) {
         // blok kode
     }
     ```
   * **do-while**:

     ```php
     do {
         // blok kode
     } while (condition);
     ```

#### Kapan Menggunakan `do-while` Loop?

1. **Kondisi Awal Tidak Diketahui**: Gunakan `do-while` loop ketika Anda perlu menjalankan blok kode setidaknya sekali tanpa memperhatikan kondisi awal.
2. **Validasi Input Pengguna**: `do-while` loop sering digunakan untuk memvalidasi input pengguna, di mana Anda ingin memastikan bahwa input pertama selalu diterima dan diperiksa.

#### Tips dan Praktik Terbaik

1. **Jaga Kondisi Loop**: Pastikan kondisi loop akan menjadi salah pada titik tertentu untuk menghindari loop tak terhingga.
2. **Gunakan Komentar**: Gunakan komentar untuk menjelaskan logika di dalam blok kode, terutama jika kode tersebut kompleks.
3. **Gunakan `break` jika Diperlukan**: Dalam beberapa kasus, Anda mungkin perlu keluar dari loop lebih awal. Gunakan pernyataan `break` untuk mengakhiri loop sebelum kondisi menjadi salah.
4. **Validasi Input**: Saat menggunakan `do-while` untuk validasi input, pastikan untuk menangani semua kemungkinan nilai yang tidak valid.

Dengan memahami dan menerapkan `do-while` loop dengan baik, Anda dapat menulis kode PHP yang lebih fleksibel dan efisien.
