Ilustrasi flat vector diagram alur sederhana dengan simpul keputusan yang bercabang dua

Episode #57 kemarin kita belajar bahan mentahnya: variabel, tipe data, operator. Sekarang di episode #58 kita belajar otaknya: bagaimana program mengambil keputusan, mengulang pekerjaan, dan mengelompokkan kode jadi unit yang bisa dipakai ulang. Tiga konsep ini, if else, perulangan, dan function, adalah 80 persen dari semua logika program yang akan kamu tulis seumur hidup. Kuasai ini, sisanya cuma variasi.

Sesuai prinsip blog ini, kita mulai dari analogi kehidupan sehari-hari dulu, baru masuk syntax. Karena logika ini sebenarnya sudah kamu pakai tiap hari tanpa sadar.

Logika Itu Bukan Bakat, Itu Kebiasaan Sehari-hari

Persepsi yang perlu diluruskan dulu: banyak pemula mengira "logika programming" itu bakat khusus yang cuma dimiliki orang pintar. Padahal setiap hari kamu menjalankan if else dan perulangan di kepalamu. Bangun pagi: jika hari hujan, bawa payung, kalau tidak, pakai topi. Itu if else. Cuci piring: ambil piring kotor, gosok, bilas, ulangi sampai piring habis. Itu perulangan. Resep masakan: "tumis bumbu" adalah satu perintah singkat yang merangkum sepuluh langkah detail. Itu function.

Yang baru dari programming cuma bahasanya, bukan cara berpikirnya. Jadi kalau kamu merasa "tidak bakat logika", kemungkinan besar kamu cuma belum menerjemahkan kebiasaan berpikirmu ke syntax. Artikel ini jembatan penerjemahnya.

If Else: Program yang Bisa Memilih

Struktur dasarnya begini:

<?php
$nilai = 75;

if ($nilai >= 90) {
  echo "A";
} elseif ($nilai >= 75) {
  echo "B";
} elseif ($nilai >= 60) {
  echo "C";
} else {
  echo "D";
}
?>

Alur berpikirnya: PHP mengecek kondisi dari atas ke bawah, blok pertama yang kondisinya true dijalankan, sisanya dilewati. Kata kuncinya elseif (ditulis sambung di PHP, beda dengan JavaScript yang else if dipisah).

Ada satu hal penting soal urutan. Kenapa pengecekan dimulai dari nilai tertinggi (90 dulu, bukan 60 dulu)? Karena kondisi dicek berurutan dan berhenti di yang pertama cocok. Kalau kamu cek >= 60 duluan, nilai 95 akan masuk ke situ dan dapat "C", padahal seharusnya "A". Analoginya seperti saringan bertingkat: saringan paling halus harus di atas, kalau saringan kasar duluan, semua lolos di situ.

Berhenti dan tebak dulu! Apa output kode ini? Perhatikan urutan kondisinya.

<?php
$umur = 20;

if ($umur >= 17) {
  echo "Boleh bikin KTP";
} elseif ($umur >= 20) {
  echo "Boleh nyetir mobil";
} else {
  echo "Belum boleh apa-apa";
}
?>
Jawaban: "Boleh bikin KTP". Umur 20 memenuhi kondisi pertama (>= 17), jadi blok itu dijalankan dan pengecekan berhenti. Kondisi kedua tidak pernah dicek walau umur 20 juga memenuhi >= 20. Ini bug logika klasik: kondisi yang lebih umum menutupi kondisi yang lebih spesifik. Perbaikannya: cek yang paling spesifik dulu (>= 20 sebelum >= 17), atau gabungkan kondisinya dengan logika yang benar.

Perulangan: Jangan Kerjakan Manual yang Bisa Diulang Mesin

PHP punya tiga perulangan utama. while untuk "ulangi selama kondisi true" (jumlah pengulangan tidak pasti), for untuk "ulangi sekian kali" (jumlah pasti), dan foreach untuk "ulangi untuk tiap isi koleksi" (bintang utama saat berurusan dengan array, kita pakai banyak di episode #59).

<?php
// while: ulangi selama kondisi terpenuhi
$saldo = 100;
while ($saldo > 0) {
  echo "Beli jajan Rp10. Sisa: Rp$saldo
"; $saldo -= 10; } // for: ulangi 5 kali, counter jelas for ($i = 1; $i <= 5; $i++) { echo "Pengulangan ke-$i
"; } ?>

Perhatikan baris $saldo -= 10 di while. Itu bukan hiasan, itu rem-nya. Perulangan while tanpa ada yang mengubah kondisinya akan jalan selamanya: infinite loop. Browser atau server-mu hang, dan kamu harus kill prosesnya. Analogi: while itu seperti menyuruh orang "terus aduk sampai mengental". Kalau tidak ada yang mengecek kekentalan dan mematikan kompor, ia mengaduk sampai kiamat. Setiap while wajib punya jalan keluar yang jelas.

Struktur for lebih aman buat pemula karena tiga komponennya eksplisit dalam satu baris: mulai dari mana ($i = 1), sampai kapan ($i <= 5), tiap putaran berubah bagaimana ($i++). Kalau kamu bingung memilih, aturan praktisnya: tahu mau berapa kali? pakai for. Tidak tahu, tergantung kondisi? pakai while. Mau mengolah tiap isi array? pakai foreach (episode #59).

Berhenti dan tebak dulu! Berapa baris yang dicetak kode ini? Hati-hati dengan operatornya.

<?php
for ($i = 0; $i < 3; $i++) {
  echo "Halo
"; } ?>
Jawaban: 3 baris. $i mulai dari 0, lalu 1, lalu 2. Saat $i = 3, kondisi $i < 3 sudah false sehingga berhenti. Pola "mulai dari 0, kondisi < n" menghasilkan tepat n pengulangan. Ini pola paling umum di programming, hafalkan bentuknya: mulai 0, lebih kecil dari jumlah, tambah satu.

Function: Beri Nama pada Sekumpulan Langkah

Function adalah cara memberi nama pada sekumpulan langkah supaya bisa dipanggil berkali-kali tanpa menulis ulang. Ingat analogi resep "tumis bumbu": satu perintah singkat yang di dalamnya ada sepuluh langkah detail.

<?php
function sapa($nama) {
  return "Halo, $nama! Selamat belajar PHP.";
}

echo sapa("Adit");
echo sapa("Budi");
?>

Dua konsep kunci: parameter ($nama) adalah "lubang masukan", nilai yang kamu kirim saat memanggil. Return adalah "hasil keluaran", nilai yang dikembalikan function ke pemanggil. Bedakan dengan echo: echo langsung mencetak ke layar, return menyerahkan nilai kembali supaya bisa dipakai lagi, misal disimpan ke variabel atau digabung dengan string lain.

Kesalahan klasik pemula: function yang echo di dalam padahal seharusnya return. Akibatnya nilainya tidak bisa dipakai ulang. Aturan praktisnya: function yang tugasnya "menghitung sesuatu" harus return. Function yang tugasnya "menampilkan sesuatu" boleh echo. Kalau ragu, pilih return, karena hasil return selalu bisa di-echo belakangan, tapi hasil echo tidak bisa diapa-apakan lagi.

Kenapa repot-repot bikin function untuk kode yang cuma dipakai sekali? Tiga alasan. Pertama, memberi nama = memberi makna: hitungOngkir(...) jauh lebih jelas daripada 15 baris rumus tanpa nama. Kedua, gampang dites dan diperbaiki di satu tempat. Ketiga, kebiasaan baik: kode yang hari ini dipakai sekali, besok sering ternyata dibutuhkan di tempat lain.

Berhenti dan tebak dulu! Apa outputnya? Perhatikan beda return dan echo.

<?php
function kaliDua($angka) {
  return $angka * 2;
}

$hasil = kaliDua(5) + 10;
echo $hasil;
?>
Jawaban: 20. kaliDua(5) me-return 10 (bukan mencetak). Nilai 10 itu lalu dijumlahkan dengan 10 menjadi 20, dan 20 itulah yang di-echo. Kalau function-nya pakai echo bukan return, baris $hasil = ... akan kacau karena tidak ada nilai yang dikembalikan untuk dijumlahkan. Inilah kenapa return lebih fleksibel dari echo.

Kuis cepat: Kamu mau menampilkan daftar 100 nama dari array. Perulangan mana yang paling pas?

Menggabungkan Semuanya: Studi Kasus Mini

Mari lihat ketiganya bekerja sama dalam satu program kecil: cek kelulusan sekumpulan siswa.

<?php
function predikat($nilai) {
  if ($nilai >= 90) return "A";
  if ($nilai >= 75) return "B";
  if ($nilai >= 60) return "C";
  return "D";
}

$nilaiSiswa = [85, 92, 58, 77];

foreach ($nilaiSiswa as $n) {
  echo "Nilai $n : " . predikat($n) . "<br>";
}
?>

Perhatikan arsitekturnya: function predikat berisi if (pengambil keputusan), foreach mengulang untuk tiap nilai (perulangan), dan keduanya terpisah rapi. Kalau aturan predikat berubah besok, kamu cuma edit function-nya, foreach tidak tersentuh. Inilah pola yang akan kamu pakai terus: function untuk aturan, perulangan untuk mengulang aturan itu ke banyak data. (Sintaks array [...] dan foreach kita bedah tuntas di episode #59.)

Latihan dan Langkah Berikutnya

Latihan 1. Bikin file ganjil-genap.php. Buat function cekGanjilGenap($angka) yang me-return string "ganjil" atau "genap" (petunjuk: pakai operator sisa bagi %). Lalu pakai for untuk menampilkan hasil cek angka 1 sampai 20. Jangan menulis if 20 kali.

Latihan 2. Ubah contoh predikat di atas: TAMBAHKAN aturan baru, nilai di bawah 40 dapat predikat "E (mengulang)". Lalu TAMBAHKAN hitungan di akhir: berapa siswa yang lulus (predikat A/B/C) dan berapa yang tidak. Petunjuk: siapkan variabel counter sebelum foreach, tambah di dalam if.

Latihan 3. Bikin function bintang($jumlah) yang me-return string berisi bintang sebanyak $jumlah (misal bintang(3) me-return "***", petunjuk: pakai for dan penggabungan string .=). Lalu pakai for bersarang untuk mencetak segitiga: baris 1 satu bintang, baris 2 dua bintang, sampai 5 baris. Ini latihan klasik yang melatih perulangan bersarang.

Di episode #59 kita berkenalan dengan struktur data paling penting di PHP: array, plus dua variabel super yang jadi pintu masuk semua data dari user, $_GET dan $_POST. Di sanalah program PHP-mu mulai bisa menerima input dari form HTML. Sampai jumpa.