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 #

OperatorNamaAturan
&&AND logika (short-circuit)Hasil true hanya bila kedua operand true
``
!NOT logikaMembalik 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:

csharp
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:

text
-- && --
  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
False

Mari kita telaah baris demi baris:

  1. Bagian &&: Hanya CekStok(0) yang mencetak pesan. Operand kiri bernilai false, sehingga CekStok(10) tidak pernah dieksekusi dan hasilnya False.
  2. Bagian ||: Hanya CekStok(10) yang mencetak pesan. Operand kiri bernilai true, sehingga hasil pasti True tanpa memeriksa sisi kanan.
  3. Bagian & dan |: Kedua CekStok mencetak pesan pada masing-masing baris. Versi tanpa short-circuit selalu mengevaluasi kedua operand, meski nilai akhirnya sama dengan versi short-circuit.
  4. Bagian !: !bisaPesan membalik False menjadi True, sedangkan bisaPesan && adaStok menghasilkan False karena bisaPesan bernilai false.

Kombinasi dalam Skenario Nyata #

Contoh berikut menggabungkan operator logika dengan operator perbandingan untuk menentukan diskon pelanggan member:

csharp
bool memberAktif = true;
int totalBelanja = 200000;

bool dapatDiskon = memberAktif && totalBelanja >= 150000;
Console.WriteLine(dapatDiskon);
Console.WriteLine(!dapatDiskon);

Output yang Dihasilkan:

text
True
False

Baris 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.