Operator logika - 1

"Hai, Amigo!"

"Sekarang kita akan mendapat pelajaran kecil tentang operator logika."

"Operator logika apa yang kamu ketahui?"

— ATAU (||), DAN (&&), BUKAN(!)

"Ya. Kerja bagus. Dan apakah Anda ingat cara kerjanya?"

"Ya."

"ATAU menghasilkan benar ketika setidaknya satu operan benar."

"DAN menghasilkan benar ketika kedua operan benar."

"TIDAK mengubah benar menjadi salah, dan salah menjadi benar."

"Betul. Dan dalam urutan apa operator dievaluasi dalam ungkapan ini?"

boolean a = true;
boolean b = false;
boolean c = true;

boolean result = a && b || !c && b || !a;

"Ini semua sangat sederhana."

"Pertama, BUKAN (!), lalu DAN (&&), lalu ATAU (||) di bagian paling akhir."

Jika kita menambahkan tanda kurung, maka kita akan mendapatkan:

boolean a = true;
boolean b = false;
boolean c = true;

boolean result = (a && b) || ((!c) && b) || (!a);

"Itu semua benar, bagus sekali. Dan apa hasilnya?"

— 1) (a && b) == (benar && salah) == salah

2) ((!c) && b) == (salah && salah) == salah

3) (!a) == salah

4) salah || salah || salah == salah

"Hasilnya salah."

"Sepertinya kamu tahu topiknya dengan sempurna. Lalu aku akan memberitahumu beberapa rahasia kecil."

"Pertama, ekspresi logis dievaluasi dari kiri ke kanan."

"Kedua, evaluasi hubung singkat digunakan di sini (perhitungan dilakukan hanya jika diperlukan). Jika hasil akhir sudah diketahui dari evaluasi bagian ekspresi, maka ekspresi lainnya tidak dievaluasi."

Contoh
boolean result = (true && false) || (true && true) || (true && false);

"Ungkapan ini dibagi menjadi tiga bagian yang dipisahkan oleh operator OR (||)."

"Jika setidaknya satu bagian benar, maka jawabannya benar dan tidak ada lagi yang perlu dipertimbangkan. Oleh karena itu, ekspresi dievaluasi seperti ini:"

1)  Evaluasi bagian pertama:  (benar && salah) == salah

2)  Evaluasi bagian kedua:  (benar && benar) == benar

3) Kami tidak mengevaluasi bagian ketiga, karena sudah jelas jawabannya akan benar .

"Pendekatan ini juga disebut evaluasi malas."

"Oke. Dan apa istimewanya?"

"Tidak ada—sampai Anda mulai memanggil metode di dalam ekspresi. Jika bagian dari ekspresi dilewati, maka metode di bagian yang dilewati tidak akan dipanggil."

"Tapi pendekatan ini sudah sangat umum. Inilah alasannya:"

Contoh:
Job job = null;

if (job != null && job.isDone())
{
…
}

"Jika pekerjaan adalah nol saat ekspresi dievaluasi, maka panggilan job.isDone() tidak akan terjadi!"

"Memang, bagian pertama dari ekspresi adalah false, yang diikuti oleh AND (&&). Jadi, seluruh ekspresi akan diketahui salah, dan bagian kedua tidak diperlukan."

"Tepat. Itu teknik yang bagus, kan?"

"Ya."