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:
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.
#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:
Pengguna berusia 17 tahun: boleh membuat KTP
Verifikasi selesaiMari kita telaah baris-baris kode di atas:
- Baris 4 (
int umur = 17;): variabelumurdiisi17, persis di ambang batas minimal. - Baris 6 (
if (umur >= 17)): kondisi17 >= 17dievaluasi menjadi1(true), sehingga blok pertama dipilih. - Baris 7 (
printf(...)): mencetak pesan bahwa pengguna boleh membuat KTP. - Baris 9 (
else): blok ini dilewati sepenuhnya—eksekusi melompat ke baris setelah}penutupelse. - Baris 12 (
printf(...)): tetap dieksekusi karenaif-elseselesai.
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.
#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:
Suhu 36: normal, tetap jaga kesehatan
Lanjut aktivitas seperti biasaPada 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.
#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:
Nilai 55: TIDAK LULUS, perlu remedi
Kode pos 40125 validPada 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:
elsewajib didahuluiif. Menuliselsetanpaifsebelumnya adalah syntax error.elsemengikat keifterdekat yang belum dipasangkan, kecuali jikaiftersebut sudah berada di dalam blok kurung kurawal. Aturan ini disebut dangling else dan akan kita bahas tuntas pada chapter nested-if.- 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.