Membuat Keputusan dengan if
Program terus-menerus bereaksi terhadap data: lulus atau gagal, stok ada atau habis, valid atau tidak. Pernyataan if adalah cara C++ memilih kode mana yang dijalankan berdasarkan sebuah kondisi.
if menerima kondisi di dalam tanda kurung dan menjalankan blok di dalam kurung kurawal hanya saat kondisi itu benar:
Kondisi score >= 60 bernilai benar, jadi pesannya tercetak. Baris setelah kurung kurawal penutup selalu berjalan, karena berada di luar if. Ubah score menjadi 40 dan baris "passed" dilewati sepenuhnya.
Kondisinya dikonversi ke bool. Perbandingan seperti >, >=, ==, != sudah menghasilkan bool, tetapi C++ juga menganggap angka apa pun yang bukan nol sebagai benar dan 0 sebagai salah. Jadi if (count) berarti "kalau count bukan nol." Konversi implisit itu praktis, tetapi juga menjadi sumber beberapa bug klasik yang akan kamu lihat di bawah.
Menambahkan else
else memberimu jalur "kalau tidak", yaitu kode yang hanya berjalan saat kondisinya salah:
Tepat satu dari dua blok itu yang berjalan, tidak pernah keduanya, dan tidak pernah tidak satu pun. else tidak punya kondisi sendiri; ia hanya menangkap semua yang tidak ditangkap if.
Merangkai dengan else if
Kalau ada lebih dari dua kemungkinan hasil, rangkai kondisinya dengan else if. C++ mengeceknya dari atas ke bawah dan menjalankan blok pertama yang kondisinya benar, lalu melewati sisanya:
Urutannya penting. Karena 84 diuji terhadap >= 90 lebih dulu (salah), lalu >= 80 (benar), ia berhenti di B dan tidak pernah mengecek batas yang lebih rendah. Karena itu juga kamu tidak perlu menulis score >= 80 && score < 90: sampai di cabang kedua sudah menjamin score di bawah 90. Taruh kondisi yang paling sempit atau paling diutamakan di urutan pertama.
Perhatikan bahwa tidak ada kata kunci elif di C++; else if secara harfiah adalah else yang isinya if lain. Kurung kurawal hanya membuatnya terbaca seperti satu tangga.
Jebakan Besar: = vs ==
Bug pernyataan if yang paling umum di C dan C++ adalah menulis = (pengisian nilai) padahal maksudmu == (perbandingan):
x = 5 mengisi 5 ke x dan seluruh ekspresinya bernilai 5, yang dikonversi menjadi true. Jadi cabangnya selalu berjalan dan kamu diam-diam telah menimpa x. Kode ini bisa dikompilasi; sebagian besar compiler hanya memunculkan warning. Ada dua pertahanan: nyalakan warning (-Wall) supaya compiler menandainya, dan pertimbangkan untuk menaruh konstantanya di sisi depan, yaitu if (5 == x), karena if (5 = x) adalah error yang langsung ditangkap compiler.
Jebakan yang sama juga bersembunyi pada bool: if (ready = true) bisa dikompilasi dan mengisi nilai, sedangkan if (ready == true) (atau cukup if (ready)) membandingkan.
Menggabungkan dan Menyarangkan Kondisi
Gabungkan kondisi dengan && (dan), || (atau), dan ! (tidak), atau sarangkan satu if di dalam yang lain saat sebuah pengecekan baru masuk akal setelah pengecekan sebelumnya lolos:
&& dan || melakukan short-circuit: pada a && b, kalau a salah, C++ tidak pernah mengevaluasi b. Ini penting untuk melindungi dari akses memori yang buruk: if (ptr != nullptr && ptr->ready) aman karena dereference pointer dilewati saat ptr bernilai null. Kalau bisa, utamakan meratakan kondisi dengan && daripada menyarangkannya dalam-dalam; kondisi yang rata lebih jelas dibaca daripada piramida kurung kurawal.
Waspadai rangkaian perbandingan yang artinya tidak seperti kelihatannya: if (0 < x < 10) tidak menguji sebuah rentang. Ekspresi ini mengevaluasi 0 < x menjadi bool (0 atau 1), lalu membandingkannya dengan 10, yang selalu benar. Tulis if (0 < x && x < 10) sebagai gantinya.
Operator Ternary
Kalau yang kamu inginkan hanya memilih di antara dua nilai, operator ternary ?: adalah satu baris yang ringkas. Baca condition ? a : b sebagai "kalau condition maka a, kalau tidak b":
Ternary menghasilkan nilai yang bisa langsung kamu isikan, teruskan, atau cetak, sesuatu yang tidak bisa dilakukan if biasa. Simpan untuk pemilihan yang sederhana: kalau salah satu cabang butuh beberapa pernyataan atau logika sungguhan, if-else lengkap tetap mudah dibaca, sementara ternary bersarang cepat menjadi teka-teki. (Satu detail halus: kedua cabang harus punya tipe yang sama, jadi jangan mencampur, misalnya, string dan int.)
if dengan Initializer (C++17)
Sejak C++17 kamu bisa mendeklarasikan variabel langsung di dalam if, dengan scope yang hanya mencakup if/else. Ini mencegah variabel bantu yang umurnya pendek bocor ke kode di sekitarnya:
Bagian sebelum ; berjalan sekali dan hasilnya terlihat di kondisi maupun di else. Ini bagus untuk pola "hitung sesuatu, lalu bercabang berdasarkan hasilnya". Karena perhitungan atau konversinya terjadi sekali di awal, kamu tidak perlu menghitung ulang atau tidak sengaja memakai nilai yang sudah usang nanti. Pakai cara ini setiap kali sebuah nilai sementara hanya dibutuhkan untuk percabangan itu.
Jebakan: Kurung Kurawal yang Hilang
C++ membolehkanmu tidak menulis kurung kurawal saat sebuah cabang hanya berisi satu pernyataan, tetapi ini mengundang bug halus karena indentasinya menipu:
if (loggedIn)
cout << "Welcome\n";
cout << "Loading dashboard\n"; // NOT part of the if!
Hanya baris pertama yang dikendalikan if; baris kedua selalu berjalan apa pun nilai loggedIn, meskipun indentasinya menyiratkan sebaliknya. Kesalahan klasik yang mirip adalah titik koma nyasar: if (x > 0); mengakhiri if dengan isi kosong, sehingga blok yang mengikutinya selalu berjalan tanpa syarat. Selalu pakai kurung kurawal, bahkan untuk satu baris, dan sebagian besar kesalahan jenis ini akan hilang.
Berikutnya: switch
Rangkaian if-else if sempurna saat setiap cabang menguji kondisi yang berbeda. Namun saat kamu mengecek satu nilai terhadap banyak kemungkinan tetap, seperti pilihan menu, enum, atau kode status, tangga else if yang panjang jadi berulang-ulang dan gampang salah urutan. Pernyataan switch dibuat persis untuk itu, dan itulah topik halaman berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara menulis pernyataan if-else di C++?
Tulis kondisi di dalam tanda kurung setelah if, kode yang dijalankan di dalam kurung kurawal, dan blok else opsional untuk saat kondisinya salah: if (score >= 60) { cout << "Pass"; } else { cout << "Fail"; }. Kondisinya dikonversi ke bool, jadi angka apa pun yang bukan nol dianggap benar dan 0 dianggap salah.
Apa perbedaan = dan == dalam pernyataan if C++?
== membandingkan dua nilai untuk mengecek kesamaan, sedangkan = tunggal mengisi nilai. Menulis if (x = 5) mengisi 5 ke x lalu menguji 5 (selalu benar), sebuah bug klasik. Kode ini bisa dikompilasi dan hanya memunculkan warning, jadi nyalakan warning dan pertimbangkan untuk menulis konstantanya di depan: if (5 == x).
Apa itu operator ternary di C++?
Operator ternary condition ? valueIfTrue : valueIfFalse adalah if-else ringkas yang menghasilkan sebuah nilai. Misalnya string label = age >= 18 ? "adult" : "minor"; memilih salah satu dari dua nilai. Pakai untuk memilih nilai yang sederhana; gunakan if-else lengkap saat setiap cabang punya logika sungguhan.