Banyak keputusan di program hanya punya dua kemungkinan hasil: lulus atau tidak lulus, boleh atau tidak boleh, valid atau tidak valid. Statement if yang dipelajari pada chapter sebelumnya hanya menangani satu cabang—bila kondisi false, program tidak melakukan apa pun. Untuk dua cabang yang saling eksklusif, C menyediakan bentuk if-else. Pada chapter ini kita akan memakai if-else untuk menangani kasus dwi-cabang, memahami bagaimana compiler memilih salah satu cabang, dan menelaah praktik baik dalam membungkus statement di dalam kurung kurawal.

Sintaks if-else #

Bentuk umum if-else di C mengikuti aturan ISO/IEC 9899 §6.8.4.1:

c
if (ekspresi) {
    /* blok true */
} else {
    /* blok false */
}

Compiler mengevaluasi ekspresi. Jika hasilnya tidak sama dengan 0, blok di antara kurung kurawal pertama dieksekusi. Jika hasilnya 0, blok setelah else yang dieksekusi. Yang penting, kedua blok selalu saling eksklusif: tepat satu dari dua blok akan jalan, tidak pernah keduanya sekaligus.

Visualisasi Konsep #

Diagram berikut memperlihatkan alur keputusan dwi-cabang if-else:

Pada diagram di atas, alur dimulai dari Mulai, lalu mengevaluasi kondisi. Bila hasil evaluasi tidak sama dengan 0, cabang true (blok if) dieksekusi; bila hasil evaluasi 0, cabang false (blok else) dieksekusi. Kedua cabang konvergen kembali ke alur utama setelah selesai—ini mencerminkan sifat saling eksklusif if-else: tepat satu blok yang dieksekusi, tidak pernah keduanya, dan tidak pernah tidak sama sekali.

c
#include <stdio.h>

int main(void) {
    int umur = 17;

    if (umur >= 17) {
        printf("Pengguna berusia %d tahun: boleh membuat KTP\n", umur);
    } else {
        printf("Pengguna berusia %d tahun: belum boleh membuat KTP\n", umur);
    }

    printf("Verifikasi selesai\n");
    return 0;
}

Output yang Dihasilkan:

text
Pengguna berusia 17 tahun: boleh membuat KTP
Verifikasi selesai

Mari kita telaah baris-baris kode di atas:

  1. Baris 4 (int umur = 17;): variabel umur diisi 17, persis di ambang batas minimal.
  2. Baris 6 (if (umur >= 17)): kondisi 17 >= 17 dievaluasi menjadi 1 (true), sehingga blok pertama dipilih.
  3. Baris 7 (printf(...)): mencetak pesan bahwa pengguna boleh membuat KTP.
  4. Baris 9 (else): blok ini dilewati sepenuhnya—eksekusi melompat ke baris setelah } penutup else.
  5. Baris 12 (printf(...)): tetap dieksekusi karena if-else selesai.

if-else dengan Banyak Statement #

Salah satu kekuatan if-else adalah setiap cabang dapat berisi banyak statement asalkan dibungkus kurung kurawal. Tanpa kurung kurawal, hanya satu statement yang akan terikat ke else. Berikut contoh if-else yang masing-masing cabangnya mengeksekusi beberapa printf.

c
#include <stdio.h>

int main(void) {
    int suhu = 36;

    if (suhu >= 37) {
        printf("Suhu %d: demam, istirahatlah\n", suhu);
        printf("Minum air yang cukup\n");
    } else {
        printf("Suhu %d: normal, tetap jaga kesehatan\n", suhu);
        printf("Lanjut aktivitas seperti biasa\n");
    }
    return 0;
}

Output yang Dihasilkan:

text
Suhu 36: normal, tetap jaga kesehatan
Lanjut aktivitas seperti biasa

Pada contoh di atas, suhu bernilai 36, sehingga 36 >= 37 adalah 0 (false). Compiler melompati blok if dan mengeksekusi blok else. Dua printf di dalam blok else dijalankan berurutan, lalu program selesai.

Validasi dengan if-else #

if-else sangat cocok untuk pola validasi: jika input memenuhi syarat, lakukan tindakan utama; bila tidak, tampilkan pesan kesalahan. Pola ini muncul berulang di banyak program nyata—validasi form, pengecekan hak akses, hingga pemeriksaan argumen command-line.

c
#include <stdio.h>

int main(void) {
    int nilai = 55;
    int batas_lulus = 60;

    if (nilai >= batas_lulus) {
        printf("Nilai %d: LULUS\n", nilai);
    } else {
        printf("Nilai %d: TIDAK LULUS, perlu remedi\n", nilai);
    }

    /* Pemakaian if-else untuk validasi input */
    int kode_pos = 40125;
    if (kode_pos > 10000 && kode_pos < 99999) {
        printf("Kode pos %d valid\n", kode_pos);
    } else {
        printf("Kode pos %d tidak valid\n", kode_pos);
    }
    return 0;
}

Output yang Dihasilkan:

text
Nilai 55: TIDAK LULUS, perlu remedi
Kode pos 40125 valid

Pada blok pertama, 55 >= 60 menghasilkan 0 (false), sehingga cabang else dipilih dan pesan “TIDAK LULUS” tercetak. Pada blok kedua, ekspresi kode_pos > 10000 && kode_pos < 99999 dievaluasi: 40125 > 10000 = 1, lalu 40125 < 99999 = 1, hasil 1 && 1 = 1, sehingga cabang true dipilih dan pesan valid dicetak.

Aturan Penulisan else yang Perlu Diperhatikan #

Beberapa aturan penting ketika memakai if-else:

  1. else wajib didahului if. Menulis else tanpa if sebelumnya adalah syntax error.
  2. else mengikat ke if terdekat yang belum dipasangkan, kecuali jika if tersebut sudah berada di dalam blok kurung kurawal. Aturan ini disebut dangling else dan akan kita bahas tuntas pada chapter nested-if.
  3. Kurung kurawal sangat dianjurkan meski hanya satu statement. Hal ini mencegah bug saat kita menambahkan statement kedua di kemudian hari.

Pada chapter berikutnya kita akan memperluas if-else menjadi rantai else if agar bisa menangani lebih dari dua kemungkinan cabang secara berurutan.