Operator logik - 1

"Hai, Amigo!"

"Sekarang kita akan mempunyai pelajaran kecil tentang pengendali logik."

"Pengendali logik apa yang anda tahu?"

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

"Yep. Good job. And you remember how they work?"

"Ya."

"ATAU menghasilkan benar apabila sekurang-kurangnya satu operan adalah benar."

"DAN menghasilkan benar apabila kedua-dua operan adalah benar."

"TIDAK berubah benar kepada palsu, dan palsu kepada benar."

"Betul. Dan dalam urutan apakah pengendali dinilai dalam ungkapan ini?"

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

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

"Ini semua sangat mudah."

"Pertama, BUKAN (!), kemudian DAN (&&), dan kemudian ATAU (||) pada penghujungnya."

Jika kita menambah kurungan, maka kita akan mendapat:

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

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

"Itu semua betul, syabas. Dan apakah hasilnya?"

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

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

3) (!a) == palsu

4) palsu || palsu || palsu == palsu

"Hasilnya palsu."

"Nampaknya anda tahu topik itu dengan sempurna. Kemudian saya akan memberitahu anda beberapa rahsia kecil."

"Pertama, ungkapan logik dinilai dari kiri ke kanan."

"Kedua, penilaian litar pintas digunakan di sini (pengiraan dilakukan hanya jika perlu). Jika hasil akhir sudah diketahui daripada menilai sebahagian ungkapan, maka ungkapan yang lain tidak dinilai."

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

"Ungkapan ini dibahagikan kepada tiga bahagian yang dipisahkan oleh pengendali OR (||)."

"Jika sekurang-kurangnya satu bahagian adalah benar, maka jawapannya adalah benar dan tiada perkara lain yang perlu dipertimbangkan. Sehubungan itu, ungkapan itu dinilai seperti ini:"

1)  Nilaikan bahagian pertama:  (benar && salah) == salah

2)  Nilaikan bahagian kedua:  (benar && benar) == benar

3) Kami tidak menilai bahagian ketiga, kerana sudah jelas bahawa jawapannya adalah benar .

"Pendekatan ini juga dipanggil penilaian malas."

"OK. Dan apa yang istimewanya?"

"Tiada apa-apa—sehingga anda mula memanggil kaedah di dalam ungkapan. Jika sebahagian daripada ungkapan dilangkau, maka kaedah dalam bahagian yang dilangkau tidak akan dipanggil."

"Tetapi pendekatan ini telah menjadi sangat biasa. Inilah sebabnya:"

Contoh:
Job job = null;

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

"Jika kerja adalah batal apabila ungkapan dinilai, maka panggilan job.isDone() tidak akan berlaku!"

"Memang, bahagian pertama ungkapan adalah palsu, yang diikuti dengan DAN (&&). Jadi, keseluruhan ungkapan akan diketahui palsu dan bahagian kedua tidak diperlukan."

"Tepat sekali. Teknik yang bagus, kan?"

"Ya."