dartpercabangandasarPemula4 mnt baca

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

dart
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

dart
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:

dart
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:

dart
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:

dart
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

dart
// SALAH
void main() {
  int nilai = 85;
  // if (nilai) { } // ERROR: int bukan bool
}
dart
// BENAR: bandingkan dulu agar jadi bool
void main() {
  int nilai = 85;
  if (nilai >= 70) {
    print('Lulus');
  }
}

2. Titik koma setelah kondisi if

dart
// SALAH: titik koma mengakhiri if secara prematur
void main() {
  int nilai = 85;
  if (nilai >= 70);
  {
    print('Selalu tercetak, if-nya mati!');
  }
}
dart
// BENAR
void main() {
  int nilai = 85;
  if (nilai >= 70) {
    print('Hanya tercetak jika kondisi true');
  }
}

3. Urutan else if yang salah

dart
// 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!
  }
}
dart
// 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.

text
void main() {
  int umur = 17;
  // TODO: cetak kategorinya
}