Soal 1Dalam rangkaian else if dengan >= 50000 di urutan pertama dan >= 100000 sesudahnya, cabang mana yang dijalankan kalau kamu memasukkan 120000?
Percabangan — else if, Operator Ternary, dan switch
Pelajari percabangan JavaScript dari dasar: else if untuk mengecek bertahap, operator ternary yang menghasilkan value, serta switch dan peran break.
Saat menentukan level membership atau menampilkan status pesanan, kondisinya jarang terbagi rapi jadi dua. Kalau Platinum, Gold, dan Regular ditulis sebagai tiga if terpisah, kondisi di bawahnya tetap dicek walaupun hasilnya sudah ditentukan oleh kondisi di atas, sehingga muncul satu baris output untuk setiap kondisi yang terpenuhi.
Artikel ini membahas else if untuk mengecek kondisi secara bertahap, operator ternary yang langsung menghasilkan value, dan switch untuk mencocokkan satu value dengan beberapa kandidat.
Membagi Jadi Tiga Kasus atau Lebih — Merangkai else if
Kita akan menentukan label penilaian dari rata-rata skor ulasan sebuah produk. Skor 4.5 ke atas berarti "Sangat bagus", 3.5 ke atas berarti "Bagus", dan di bawah itu "Di bawah rata-rata".
Kalau kamu menulis dua if terpisah, masing-masing dicek sendiri-sendiri. Dengan skor 4.8, kedua kondisi terpenuhi dan dua baris tercetak: "Sangat bagus" dan "Bagus".
Dengan merangkai else if (kondisi lanjutan yang hanya dicek kalau kondisi sebelumnya tidak terpenuhi), beberapa kondisi bisa digabung menjadi satu percabangan. Blok { } yang mengikuti setiap kondisi disebut cabang.
Kondisi dicek dari atas ke bawah, dan hanya cabang pertama yang kondisinya true yang dijalankan. Kalau tidak ada yang cocok, cabang else yang dijalankan.
const score = 4.8; // rata-rata skor ulasan sebuah produk
// if yang terpisah dicek sendiri-sendiri
if (score >= 4.5) {
console.log("Sangat bagus"); // true
}
if (score >= 3.5) {
console.log("Bagus"); // juga true → tercetak 2 baris
}
// Kalau dirangkai dengan else if, pengecekan berhenti di cabang pertama yang cocok
if (score >= 4.5) {
console.log("Sangat bagus"); // hanya ini yang dijalankan
} else if (score >= 3.5) {
console.log("Bagus"); // tidak dicek
} else {
console.log("Di bawah rata-rata"); // tidak dicek
}
Skor 4.8 sudah memenuhi score >= 4.5 di tahap pertama lalu keluar ke kanan, jadi tahap kedua tidak dicek. Panah turun ke tahap berikutnya hanya kalau kondisinya false.
else boleh dihilangkan. Tanpa else, kalau tidak ada kondisi yang cocok, tidak ada cabang yang dijalankan dan eksekusi lanjut ke baris setelah percabangan itu.
Tabel di bawah menunjukkan di tahap mana pengecekan berhenti saat tiga skor berbeda melewati rangkaian yang sama.
| Rata-rata skor | Dicek dari atas | Baris yang tercetak |
|---|---|---|
| 4.8 | 4.5 ke atas true, berhenti di sini | Sangat bagus (hanya 1 baris) |
| 3.8 | 4.5 ke atas false / 3.5 ke atas true | Bagus (hanya 1 baris) |
| 2.1 | Keduanya false, jadi turun ke else | Di bawah rata-rata (hanya 1 baris) |
Urutan Kondisi Mengubah Hasilnya
Kalau kondisi dengan cakupan lebih luas ditaruh lebih dulu, kondisi yang lebih sempit di bawahnya tidak akan pernah tercapai. Kalau kamu menulis score >= 3.5 lebih dulu, produk dengan skor 4.8 pun berakhir sebagai "Bagus". Supaya 4.8 dinilai "Sangat bagus", taruh kondisi yang lebih sempit seperti score >= 4.5 di urutan pertama.
Mendapatkan Hasil Berupa Value — Cara Menulis Operator Ternary
Kadang kamu ingin memilih antara "Stok tersedia" dan "Stok habis" berdasarkan jumlah stok, lalu menyimpan string itu di variabel supaya bisa dipakai ulang. Dengan if dan else, kamu tidak bisa memakai const, karena const harus langsung diberi value saat dideklarasikan. Jadi kamu harus mendeklarasikan variabelnya dulu dengan let, lalu meng-assign value di masing-masing cabang.
Kode seperti stock > 0 yang menghasilkan sebuah value saat dievaluasi disebut expression. Kode seperti if (…) { … } yang hanya menjalankan proses tanpa menghasilkan value disebut statement.
Dengan operator ternary (expression yang menerima tiga bagian — kondisi, value saat true, dan value saat false — lalu menghasilkan value yang terpilih), kedua cabang bisa ditulis dalam satu baris.
const stock = 0; // jumlah stok
// if adalah statement, jadi deklarasi dan assignment terpisah
let label;
if (stock > 0) {
label = "Stok tersedia";
} else {
label = "Stok habis";
}
console.log(label); // Stok habis
// Operator ternary adalah expression, jadi bisa langsung dimasukkan ke const
const badge = stock > 0 ? "Stok tersedia" : "Stok habis";
console.log(badge); // Stok habis
// Bisa juga ditulis langsung di dalam template literal
console.log(`Status: ${stock > 0 ? "Bisa dibeli" : "Menunggu restock"}`); // Status: Menunggu restock
Kalau hasilnya perlu dibagi jadi tiga atau lebih, kembali ke else if. Operator ternary memang bisa dibuat bersarang, tapi ? dan : akan muncul berkali-kali dalam satu baris, seperti a ? x : b ? y : z, sehingga sulit melihat sekilas kondisi mana yang berpasangan dengan value mana.
Memilah Berdasarkan Satu Value — switch dan case
Kita akan menentukan pesan biaya berdasarkan metode pembayaran yang dipilih pelanggan. Ini bisa ditulis dengan else if, tapi kamu jadi menulis variabel yang sama berulang kali — paymentMethod === "credit", paymentMethod === "convenience" — sehingga sulit melihat apa sebenarnya yang dibandingkan di percabangan itu.
Dengan switch (statement yang mencocokkan satu value dengan beberapa kandidat secara berurutan, lalu mulai menjalankan dari cabang yang cocok), value yang dibandingkan cukup ditulis sekali di dalam tanda kurung, dan kandidatnya didaftar sebagai case value:. break di akhir cabang membuat eksekusi keluar dari switch, dan kalau tidak ada case yang cocok, cabang default: yang dijalankan.
const paymentMethod = "credit"; // metode pembayaran yang dipilih pelanggan
switch (paymentMethod) {
case "credit":
console.log("Tanpa biaya"); // ini yang dijalankan
break;
case "convenience":
console.log("Biaya: 200 yen"); // bayar di minimarket; tidak cocok
break;
case "cod":
console.log("Biaya: 330 yen"); // bayar di tempat (COD); tidak cocok
break;
default:
console.log("Silakan pilih metode pembayaran");
}
default boleh dihilangkan. Kalau switch tanpa default menerima value yang tidak cocok dengan apa pun, tidak ada cabang yang dijalankan dan eksekusi lanjut ke baris berikutnya. Kalau value di luar kandidat mungkin saja datang, taruh pesan di default supaya value yang tidak terduga langsung terlihat di layar.
Pencocokan case Membedakan String dan Number
switch mencocokkan value dengan cara yang sama seperti ===, jadi value dengan type berbeda tidak akan pernah cocok. String "200" yang diambil dari kolom input tidak masuk ke case 200: dan malah lanjut ke default. Kalau value-nya bisa berupa number atau string, samakan dulu type-nya sebelum dicocokkan.
Lanjut ke case Berikutnya — Kalau break Tidak Ditulis
Kesalahan yang sering terjadi saat memakai switch adalah lupa menulis break. Secara sintaks kodenya tetap valid, jadi tidak muncul syntax error; kamu baru sadar setelah menjalankannya dan melihat baris output yang lebih banyak dari seharusnya.
Tanpa break, eksekusi terus berlanjut ke kode di case-case di bawah case yang cocok. Perilaku ini disebut fall-through. Eksekusi terus berjalan — tanpa membandingkan value di label case di bawahnya — sampai bertemu break atau mencapai akhir switch.
const orderStatus = "paid"; // status pesanan
// Tanpa break, kode di bawah case yang cocok ikut dijalankan
switch (orderStatus) {
case "paid":
console.log("Sudah dibayar"); // cocok, mulai dari sini
case "shipped":
console.log("Sudah dikirim"); // tidak ada break, jadi lanjut
default:
console.log("Silakan cek status pesanan"); // berjalan sampai default
}
// Dengan menumpuk case, beberapa kandidat bisa memakai kode yang sama
switch (orderStatus) {
case "pending":
case "paid":
console.log("Belum dikirim"); // pending dan paid sama-sama masuk ke sini
break;
}
Perilaku ini bisa dimanfaatkan saat kamu ingin beberapa kandidat memakai kode yang sama. Kalau dua label case ditumpuk tanpa kode di antaranya, value yang cocok dengan case di atas langsung lanjut ke kode di bawahnya. Tulis break di akhir cabang yang dipakai bersama itu.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa yang dihasilkan total >= 5000 ? 0 : 500 kalau total bernilai 5000?
Soal 3Apa yang terjadi kalau kamu lupa menulis break di akhir sebuah case?