Tidak semua keputusan membutuhkan blok if-else lima baris. Sering kali kita hanya perlu memilih satu dari dua nilai: status “Lulus” atau “Remedial”, harga normal atau harga diskon. Untuk kasus ringkas semacam itu Java menyediakan ternary operator — kondisi ? nilaiJikaTrue : nilaiJikaFalse — satu-satunya operator Java yang menerima tiga operand. Chapter ini membahas bentuk dasarnya, pemakaian untuk memilih nilai, hingga bentuk berantai (chained) beserta titik batas ketika keterbacaan kode mulai runtuh dan if-else biasa kembali menjadi pilihan yang lebih bijak.
Bentuk Dasar Ternary #
Operator ini terdiri dari tiga bagian yang dipisah tanda ? dan :. Bagian sebelum ? adalah kondisi bertipe boolean; bagian di antara ? dan : adalah nilai yang dihasilkan bila kondisi benar; bagian setelah : adalah nilai saat kondisi salah. Hanya satu dari dua cabang yang dievaluasi — cabang yang tidak terpilih tidak dijalankan sama sekali. Karena hasilnya adalah sebuah nilai, ekspresi ternary dapat langsung diisikan ke variabel, digabungkan ke teks, atau dikirim sebagai argumen method.
public class StatusKelulusan {
public static void main(String[] args) {
int nilaiBudi = 78;
String status = nilaiBudi >= 75 ? "Lulus" : "Remedial";
System.out.println("Nilai " + nilaiBudi + " -> " + status);
int nilaiDewi = 70;
System.out.println("Nilai " + nilaiDewi + " -> "
+ (nilaiDewi >= 75 ? "Lulus" : "Remedial"));
}
}Output yang Dihasilkan:
Nilai 78 -> Lulus
Nilai 70 -> RemedialBaris 4 memakai ternary untuk mengisi variabel status: karena 78 >= 75 bernilai true, cabang "Lulus" yang dipakai. Baris 8-9 menaruh ternary langsung di dalam ekspresi pencetakan — tanda kurung di sekelilingnya menjaga operator + tidak lebih dahulu menggabungkan teks. Nilai Dewi 70 tidak memenuhi syarat sehingga cabang "Remedial" yang terpilih.
Ternary untuk Memilih Nilai #
Pemakaian yang paling umum adalah memilih satu nilai dari kandidat yang ada. Pola klasiknya mencari nilai terbesar dari dua bilangan: (a > b) ? a : b — bila a lebih besar, hasilnya a; selain itu hasilnya b. Untuk tiga kandidat, ternary dapat bersarang: cabang luar membandingkan a dengan b, lalu setiap cabang membandingkan pemenangnya dengan c.
public class NilaiMaksimum {
public static void main(String[] args) {
int a = 42;
int b = 17;
int maksimum = (a > b) ? a : b;
System.out.println("Maksimum: " + maksimum);
int c = 90;
int terbesar = (a > b) ? (a > c ? a : c) : (b > c ? b : c);
System.out.println("Terbesar: " + terbesar);
}
}Output yang Dihasilkan:
Maksimum: 42
Terbesar: 90Baris 6 memilih terbesar dari dua nilai — 42 menang atas 17. Baris 10 memilih terbesar dari tiga nilai: karena a > b bernilai true, cabang (a > c ? a : c) yang dievaluasi, dan di dalamnya c yang lebih besar sehingga hasil akhirnya 90. Perhatikan bahwa hanya cabang terpilih yang benar-benar dievaluasi — cabang (b > c ? b : c) tidak pernah diperiksa.
Ternary Berantai dan Batas Keterbacaan #
Ternary dapat dirantai dengan menaruh ternary lain di cabang : — membentuk struktur yang dievaluasi berurutan dari atas ke bawah, persis seperti if - else if - else. Pola ini populer untuk memetakan angka menjadi kategori, misalnya nilai ujian menjadi predikat huruf. Kuncinya: tulis setiap tingkat pada baris tersendiri dan indentasikan sehingga rantai terbaca seperti tabel keputusan.
public class PredikatNilai {
public static void main(String[] args) {
int nilai = 78;
String predikat = nilai >= 90 ? "A"
: nilai >= 80 ? "B"
: nilai >= 70 ? "C"
: nilai >= 60 ? "D"
: "E";
System.out.println("Predikat: " + predikat);
}
}Output yang Dihasilkan:
Predikat: CNilai 78 gagal pada dua syarat pertama (>= 90, >= 80) lalu berhenti di nilai >= 70, sehingga predikatnya "C" dan tiga tingkat sisanya tidak lagi diperiksa. Struktur evaluasinya memang setara if - else if, tetapi bentuknya jauh lebih padat.
Ternary mengisi celah terakhir pada kebutuhan keputusan ringkas: satu baris, satu nilai, dua kemungkinan. Chapter berikutnya berpindah ke operator yang bekerja pada objek, bukan nilai primitif: instanceof — alat untuk bertanya kepada JVM “objek ini sebenarnya instance dari tipe apa?” lengkap dengan kemampuan pattern matching versi Java modern.
Referensi #
- Java Language Specification — Bab 15 Expressions
- Class Math — Java SE 25 API
- Oracle Dev.java — Learn Java
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
NilaiMaksimum.java
Unduh berkaspublic class NilaiMaksimum {
public static void main(String[] args) {
int a = 42;
int b = 17;
int maksimum = (a > b) ? a : b;
System.out.println("Maksimum: " + maksimum);
int c = 90;
int terbesar = (a > b) ? (a > c ? a : c) : (b > c ? b : c);
System.out.println("Terbesar: " + terbesar);
}
}
PredikatNilai.java
Unduh berkaspublic class PredikatNilai {
public static void main(String[] args) {
int nilai = 78;
String predikat = nilai >= 90 ? "A"
: nilai >= 80 ? "B"
: nilai >= 70 ? "C"
: nilai >= 60 ? "D"
: "E";
System.out.println("Predikat: " + predikat);
}
}
StatusKelulusan.java
Unduh berkaspublic class StatusKelulusan {
public static void main(String[] args) {
int nilaiBudi = 78;
String status = nilaiBudi >= 75 ? "Lulus" : "Remedial";
System.out.println("Nilai " + nilaiBudi + " -> " + status);
int nilaiDewi = 70;
System.out.println("Nilai " + nilaiDewi + " -> "
+ (nilaiDewi >= 75 ? "Lulus" : "Remedial"));
}
}