Percabangan: if-else
Mengambil keputusan di program dengan if, else if, dan else.
Program yang bisa mengambil keputusan
Sampai sekarang programmu berjalan lurus dari atas ke bawah. Tapi program nyata perlu bercabang: kalau nilai cukup, cetak "Lulus"; kalau tidak, cetak "Remedial". Percabangan if-else memberi program kemampuan mengambil keputusan.
Analogi: if-else itu seperti pertigaan jalan dengan rambu. "Jika hujan, belok kanan (berteduh). Jika tidak, lurus terus." Program mengecek kondisi, lalu memilih jalur.
Kenapa percabangan fundamental?
Hampir tidak ada aplikasi tanpa keputusan: login mengecek password benar atau salah, game mengecek menang atau kalah, toko online mengecek stok tersedia atau habis. Menguasai if-else berarti menguasai separuh logika pemrograman.
Bentuk dasar: if
void main() {
int nilai = 85;
if (nilai >= 70) {
print('Lulus!');
}
print('Program selesai.');
}Cara baca: "jika nilai lebih dari atau sama dengan 70, maka cetak Lulus". Baris print('Program selesai.') selalu dijalankan karena di luar blok if. Kondisi di dalam kurung WAJIB bertipe bool, ingat modul tipe data.
if-else: dua jalur
void main() {
int nilai = 55;
if (nilai >= 70) {
print('Lulus, selamat!');
} else {
print('Belum lulus, coba lagi ya.');
}
}Karena nilai 55, jalur else yang dijalankan. Hanya satu dari dua blok yang pernah berjalan, tidak pernah keduanya.
else if: banyak jalur bertingkat
Untuk lebih dari dua kemungkinan, rangkai else if:
void main() {
int nilai = 85;
String predikat;
if (nilai >= 90) {
predikat = 'A';
} else if (nilai >= 80) {
predikat = 'B';
} else if (nilai >= 70) {
predikat = 'C';
} else {
predikat = 'D';
}
print('Nilai $nilai dapat predikat $predikat');
}Dart mengecek dari atas ke bawah dan berhenti di kondisi pertama yang true. Nilai 85 lolos cek >= 90? Tidak. >= 80? Ya, berhenti, predikat = 'B'. Urutan penting: kalau >= 70 ditulis paling atas, semua nilai di atas 70 akan terjebak di sana.
Contoh kedua yang dekat dengan kehidupan sehari-hari:
void main() {
int jam = 19;
bool adaTugas = true;
if (jam < 12) {
print('Selamat pagi!');
} else if (jam < 18) {
print('Selamat siang!');
} else {
print('Selamat malam!');
}
if (adaTugas && jam >= 19) {
print('Waktunya kerjakan tugas.');
}
}Kondisi bisa digabung dengan operator logika && dan || dari modul operator.
Operator ternary: if-else satu baris
Untuk keputusan sederhana yang menghasilkan nilai, ada bentuk ringkas:
void main() {
int nilai = 55;
String hasil = nilai >= 70 ? 'Lulus' : 'Remedial';
print(hasil); // Remedial
}Bacanya: "nilai >= 70 ? kalau true pakai 'Lulus' : kalau false pakai 'Remedial'". Hemat tempat, tapi jangan dipakai untuk logika bertingkat yang rumit.
Kesalahan umum pemula
1. Kondisi bukan bool
// SALAH
void main() {
int nilai = 85;
// if (nilai) { } // ERROR: int bukan bool
}// BENAR: bandingkan dulu agar jadi bool
void main() {
int nilai = 85;
if (nilai >= 70) {
print('Lulus');
}
}2. Titik koma setelah kondisi if
// SALAH: titik koma mengakhiri if secara prematur
void main() {
int nilai = 85;
if (nilai >= 70);
{
print('Selalu tercetak, if-nya mati!');
}
}// BENAR
void main() {
int nilai = 85;
if (nilai >= 70) {
print('Hanya tercetak jika kondisi true');
}
}3. Urutan else if yang salah
// SALAH: cek longgar di atas menelan semua
void main() {
int nilai = 95;
if (nilai >= 70) {
print('C');
} else if (nilai >= 90) {
print('A'); // tidak pernah tercapai!
}
}// BENAR: dari yang paling ketat ke paling longgar
void main() {
int nilai = 95;
if (nilai >= 90) {
print('A');
} else if (nilai >= 70) {
print('C');
}
}Kesimpulan
if untuk satu jalur, if-else untuk dua jalur, else if berantai untuk banyak jalur dari yang paling ketat ke paling longgar. Ternary ?: untuk keputusan nilai yang sederhana. Dengan ini programmu sudah bisa "berpikir".
Catatan teknis: Dart juga punya
if-case(pattern matching) untuk mencocokkan struktur data, tapi itu fitur lanjutan. Untuk sekarang, if-else klasik sudah mencakup 95% kebutuhan.
Tantangan
Penentu kategori usia
Buat program yang mencetak kategori dari umur: <5 balita, <13 anak, <20 remaja, <60 dewasa, sisanya lansia. Pakai if-else if-else.
void main() {
int umur = 17;
// TODO: cetak kategorinya
}