Mengambil Keputusan dengan if
Program perlu bereaksi terhadap data: lulus atau gagal, stok ada atau habis, valid atau tidak. Pernyataan if adalah cara Java memilih kode mana yang dijalankan berdasarkan sebuah kondisi.
if menerima kondisi boolean di dalam tanda kurung dan menjalankan blok di dalam kurung kurawal hanya kalau kondisi itu true:
Kondisi score >= 60 bernilai true, jadi pesannya tercetak. Baris setelah kurung kurawal penutup selalu dijalankan, karena berada di luar if. Ubah score menjadi 40, maka baris "passed" dilewati sepenuhnya.
Berbeda dengan C, Java tidak membolehkanmu menaruh angka di tempat yang seharusnya boolean. if (score) menghasilkan error kompilasi: kondisinya harus berupa ekspresi boolean sungguhan yang dibangun dari perbandingan (>, >=, ==, !=) atau logika boolean (&&, ||, !).
Menambahkan else
else memberimu jalur "kalau tidak": kode yang hanya dijalankan saat kondisinya false:
Tepat salah satu dari kedua blok itu yang berjalan: tidak pernah keduanya, dan tidak pernah tidak sama sekali. else tidak punya kondisi sendiri; ia hanya menangkap semua yang tidak ditangkap oleh if.
Merangkai dengan else if
Kalau hasilnya lebih dari dua, rangkai kondisi dengan else if. Java memeriksanya dari atas ke bawah dan menjalankan blok pertama yang kondisinya true, lalu melewati sisanya:
Urutan itu penting. Karena 84 diperiksa terhadap >= 90 terlebih dahulu (false), lalu >= 80 (true), Java berhenti di B dan bahkan tidak pernah menguji batas yang lebih rendah. Itu juga alasan kamu tidak perlu menulis score >= 80 && score < 90: sampai di cabang kedua saja sudah menjamin score di bawah 90. Taruh kondisi yang paling sempit atau paling diprioritaskan di urutan pertama.
else di akhir adalah penangkap semua kasus sisanya. Kalau dihilangkan di sini, hasilnya error kompilasi, karena grade mungkin belum diberi nilai saat kamu mencetaknya.
Membandingkan Nilai: == vs equals()
Bug if yang paling umum di Java adalah membandingkan string dengan ==. Untuk tipe primitif (int, double, char, boolean), == sudah benar. Untuk objek, == bertanya "apakah ini objek yang sama di memori?", sedangkan .equals() bertanya "apakah isinya sama?", dan kamu hampir selalu menginginkan yang kedua:
Hanya pesan kedua yang tercetak. new String("yes") adalah objek yang berbeda dengan literal "yes", jadi == bernilai false, tetapi teksnya identik, jadi .equals() bernilai true. Aturan praktisnya: primitif memakai ==, objek memakai .equals().
Satu trik aman untuk menghindari NullPointerException saat variabelnya mungkin null: taruh literalnya di depan, if ("yes".equals(input)), karena literal tidak pernah null.
Menggabungkan dan Menyarangkan Kondisi
Kamu bisa menggabungkan kondisi dengan && (dan), || (atau), dan ! (tidak), atau menyarangkan satu if di dalam percabangan lain saat sebuah pemeriksaan baru masuk akal setelah pemeriksaan sebelumnya lolos:
&& dan || melakukan short-circuit: pada a && b, kalau a false, Java tidak pernah mengevaluasi b. Ini berguna untuk mencegah error: if (s != null && s.length() > 0) aman karena pemeriksaan panjangnya dilewati saat s bernilai null. Sebisa mungkin, gabungkan dengan && daripada menyarangkan terlalu dalam; kode yang datar lebih mudah dibaca daripada piramida kurung kurawal.
Jebakan klasik: satu = adalah penugasan, == adalah perbandingan. Menulis if (x = 5) menghasilkan error kompilasi untuk int (bagus), tetapi if (flag = true) pada boolean bisa dikompilasi dan diam-diam melakukan penugasan, jadi waspadalah.
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 kondisinya terpenuhi maka a, kalau tidak maka b":
Ternary menghasilkan nilai yang bisa langsung kamu simpan atau kirim. Pakai hanya untuk pemilihan yang sederhana. Kalau salah satu cabangnya butuh beberapa pernyataan atau logika sungguhan, if-else lengkap tetap mudah dibaca, sedangkan ternary bersarang cepat berubah menjadi teka-teki.
Jebakan: Kurung Kurawal yang Opsional
Java membolehkanmu tidak menulis kurung kurawal saat sebuah cabang hanya berisi satu pernyataan, tetapi ini mengundang bug yang halus. Indentasinya menipu:
if (loggedIn)
System.out.println("Welcome");
System.out.println("Loading dashboard"); // NOT part of the if!
Hanya baris pertama yang dikendalikan oleh if; baris kedua selalu berjalan apa pun kondisinya, meskipun indentasinya memberi kesan sebaliknya. Selalu pakai kurung kurawal, bahkan untuk satu baris, maka seluruh jenis kesalahan ini hilang.
Berikutnya: switch
Rangkaian if-else if sangat cocok saat setiap cabang menguji kondisi yang berbeda. Tetapi saat kamu memeriksa satu nilai terhadap banyak kemungkinan yang tetap, seperti nama hari, pilihan menu, atau enum, tangga else if yang panjang jadi berulang-ulang. Pernyataan switch dibuat persis untuk itu, dan itulah topik halaman berikutnya.
Pertanyaan yang sering diajukan
Bagaimana cara menulis if-else di Java?
Tulis kondisi boolean di dalam tanda kurung setelah if, lalu kode yang dijalankan di dalam kurung kurawal, dan blok else opsional untuk saat kondisinya false: if (score >= 60) { System.out.println("Pass"); } else { System.out.println("Fail"); }. Kondisinya harus menghasilkan boolean: Java tidak menerima int seperti yang dilakukan C.
Apa perbedaan == dan equals() di if Java?
== membandingkan apakah dua referensi menunjuk ke objek yang sama, sedangkan .equals() membandingkan isinya. Untuk tipe primitif seperti int, pakai ==. Untuk objek, terutama String, pakai .equals(): if (name.equals("Sam")), bukan if (name == "Sam"). Memakai == pada string adalah bug if yang paling umum di Java.
Apa itu operator ternary di Java?
Operator ternary condition ? valueIfTrue : valueIfFalse adalah if-else ringkas yang menghasilkan sebuah nilai. Contohnya, String label = age >= 18 ? "adult" : "minor"; memberi salah satu dari dua nilai berdasarkan kondisinya. Pakai untuk memilih nilai yang sederhana; pakai if-else lengkap kalau ada logika yang perlu dijalankan di setiap cabang.