dasarkondisiPemula3 mnt baca

Percabangan if-else

Ambil keputusan di kode: if, else, elseif, dan operator ternary yang ringkas.

Analogi: Persimpangan Jalan

Program tanpa percabangan seperti jalan tol lurus: semua kendaraan menempuh rute yang sama. Percabangan (if/elseif/else) adalah persimpangan dengan rambu: "kalau mau ke Bandung belok kiri, kalau ke Jakarta lurus, selain itu putar balik". Program akhirnya bisa mengambil keputusan sendiri berdasarkan kondisi.

Kenapa if Ada?

Tanpa if, program hanya bisa melakukan hal yang sama untuk semua orang. Dengan if, program menjadi responsif: menolak umur di bawah syarat, memberi sapaan berbeda pagi dan malam, menampilkan pesan error hanya saat input salah. Hampir semua "kecerdasan" program web adalah if yang disusun rapi.

php
<?php
// Contoh 1: if-else paling sederhana
$umur = 16;

if ($umur >= 17) {
    echo "Boleh membuat KTP.";
} else {
    echo "Belum boleh, tunggu " . (17 - $umur) . " tahun lagi.";
}
// Hasil: Belum boleh, tunggu 1 tahun lagi.

Strukturnya selalu: if (kondisi) { aksi jika benar } else { aksi jika salah }. Kondisi adalah ekspresi yang menghasilkan boolean (ingat modul operator perbandingan).

php
<?php
// Contoh 2: bertingkat dengan elseif (studi kasus nilai rapor)
$nilai = 78;

if ($nilai >= 90) {
    $predikat = "A (Sangat Baik)";
} elseif ($nilai >= 80) {
    $predikat = "B (Baik)";
} elseif ($nilai >= 70) {
    $predikat = "C (Cukup)";
} elseif ($nilai >= 60) {
    $predikat = "D (Kurang)";
} else {
    $predikat = "E (Gagal)";
}

echo "Nilai $nilai, predikat: $predikat.";
// Hasil: Nilai 78, predikat: C (Cukup).

PHP mengecek dari atas ke bawah dan berhenti di kondisi pertama yang true. Karena itu urutan penting: cek dari yang paling ketat (90) ke paling longgar. Kalau kamu membaliknya (cek >= 60 dulu), nilai 95 akan terjebak di "D" karena 95 juga >= 60.

Kesalahan Umum Pemula

Salah: menulis kondisi yang tumpang tindih tanpa sadar urutan.

php
<?php
// SALAH: nilai 95 tidak akan pernah dapat A
if ($nilai >= 60) {
    $predikat = "D";
} elseif ($nilai >= 90) {
    $predikat = "A";   // tidak pernah tercapai!
}

Benar: selalu urutkan dari kondisi paling spesifik/ketat ke paling umum, seperti contoh rapor di atas.

Salah: lupa kurung kurawal untuk banyak baris.

php
<?php
if ($umur >= 17)
    echo "Boleh.";
    echo "Silakan masuk.";   // SALAH: baris ini SELALU dijalankan!

Tanpa kurung kurawal, if hanya mengendalikan satu baris tepat di bawahnya. Baris kedua selalu jalan tanpa peduli kondisi. Biasakan selalu pakai { } meski isinya satu baris, ini mencegah bug yang sangat sulit dilihat.

Salah: membandingkan dengan = di dalam if.

php
<?php
if ($role = "admin") {   // SALAH: mengisi $role, selalu true

Sudah dibahas dua kali karena memang sesering itu terjadi: di dalam if pakai ===, bukan =.

Pola Guard Clause

Percabangan bersarang dalam adalah sumber bug dan pusing. Guard clause membaliknya: tangani kasus gagal di awal, lalu logika utama ditulis datar tanpa nesting:

php
<?php
// Bersarang (sulit dibaca):
function bolehMasuk($umur, $tiket) {
    if ($umur >= 17) {
        if ($tiket) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

// Guard clause (datar dan jelas):
function bolehMasuk2($umur, $tiket) {
    if ($umur < 17) return false;   // gagal cepat
    if (!$tiket) return false;      // gagal cepat
    return true;                    // sisa = kasus sukses
}

Prinsipnya: "usir" kasus tidak valid sedini mungkin dengan return/exit/continue. Sisa fungsi hanya berisi jalur sukses yang bersih. Pola ini dipakai luas di validasi form dan API.

Catatan teknis: PHP mengizinkan sintaks alternatif if (...): ... endif; yang populer di dalam template HTML karena lebih mudah dibaca daripada kurung kurawal bersarang. Kamu akan sering melihatnya di file view: <?php if ($login): ?><p>Halo!</p><?php endif; ?>.

Tantangan

Kategori nilai

Buat variabel $nilai (0-100). Dengan if-elseif-else, tampilkan: >=90 "Sangat Baik", >=75 "Baik", >=60 "Cukup", selain itu "Kurang". Coba dengan 3 nilai berbeda.