Satu kondisi sering tidak cukup untuk mengambil keputusan. Pesanan hanya boleh diproses bila stok tersedia dan pembayaran terkonfirmasi; promosi berlaku bila pelanggan pernah berbelanja atau memberi nilai tertentu. Operator logika menggabungkan beberapa nilai bool menjadi satu keputusan, atau membalik nilai bool itu sendiri.
Tiga Operator Logika #
| Operator | Nama | Aturan |
|---|---|---|
&& | AND logika (short-circuit) | Hasil true hanya bila kedua operand true |
| ` | ` | |
! | NOT logika | Membalik nilai: !true menjadi false |
Mekanisme Short-Circuit #
Operator && dan || bekerja hemat: evaluasi berhenti segera setelah hasil akhir sudah pasti. Pada a && b, bila a bernilai false, hasil pasti false, sehingga compiler tidak mengevaluasi b sama sekali. Pada a || b, bila a bernilai true, hasil pasti true dan b dilewati. Perilaku ini disebut short-circuit.
Untuk membuktikannya, kita memakai method pembantu yang mencetak pesan setiap kali method itu dieksekusi. Method CekStok didefinisikan di dalam program console yang sama:
bool CekStok(int jumlah)
{
Console.WriteLine($" CekStok({jumlah}) dijalankan");
return jumlah > 0;
}
Console.WriteLine("-- && --");
bool bisaPesan = CekStok(0) && CekStok(10);
Console.WriteLine(bisaPesan);
Console.WriteLine("-- || --");
bool adaStok = CekStok(10) || CekStok(0);
Console.WriteLine(adaStok);
Console.WriteLine("-- & dan | tanpa short-circuit --");
bool keduanya = CekStok(0) & CekStok(10);
Console.WriteLine(keduanya);
bool salahSatu = CekStok(10) | CekStok(0);
Console.WriteLine(salahSatu);
Console.WriteLine("-- ! --");
Console.WriteLine(!bisaPesan);
Console.WriteLine(bisaPesan && adaStok);Output yang Dihasilkan:
-- && --
CekStok(0) dijalankan
False
-- || --
CekStok(10) dijalankan
True
-- & dan | tanpa short-circuit --
CekStok(0) dijalankan
CekStok(10) dijalankan
False
CekStok(10) dijalankan
CekStok(0) dijalankan
True
-- ! --
True
FalseMari kita telaah baris demi baris:
- Bagian
&&: HanyaCekStok(0)yang mencetak pesan. Operand kiri bernilaifalse, sehinggaCekStok(10)tidak pernah dieksekusi dan hasilnyaFalse. - Bagian
||: HanyaCekStok(10)yang mencetak pesan. Operand kiri bernilaitrue, sehingga hasil pastiTruetanpa memeriksa sisi kanan. - Bagian
&dan|: KeduaCekStokmencetak pesan pada masing-masing baris. Versi tanpa short-circuit selalu mengevaluasi kedua operand, meski nilai akhirnya sama dengan versi short-circuit. - Bagian
!:!bisaPesanmembalikFalsemenjadiTrue, sedangkanbisaPesan && adaStokmenghasilkanFalsekarenabisaPesanbernilaifalse.
Kombinasi dalam Skenario Nyata #
Contoh berikut menggabungkan operator logika dengan operator perbandingan untuk menentukan diskon pelanggan member:
bool memberAktif = true;
int totalBelanja = 200000;
bool dapatDiskon = memberAktif && totalBelanja >= 150000;
Console.WriteLine(dapatDiskon);
Console.WriteLine(!dapatDiskon);Output yang Dihasilkan:
True
FalseBaris pertama setelah deklarasi menguji dua syarat sekaligus: memberAktif bernilai true dan totalBelanja >= 150000 bernilai true, sehingga && menghasilkan True. Baris berikutnya membalik hasil yang sama dengan ! menjadi False. Pola inilah yang nantinya kita pakai sebagai kondisi if di bagian control flow: operator perbandingan menyediakan pertanyaan, operator logika menggabungkan jawabannya.