Mantıksal işleçler - 1

"Merhaba, Amigo!"

"Şimdi mantıksal operatörler hakkında küçük bir dersimiz olacak."

"Hangi mantıksal operatörleri biliyorsun?"

— VEYA (||), VE (&&), DEĞİL(!)

"Evet. Aferin. Nasıl çalıştıklarını hatırlıyor musun?"

"Evet."

"OR, en az bir işlenen doğru olduğunda doğru sonucunu verir."

"VE, her iki işlenen de doğru olduğunda doğru sonucunu verir."

"NOT, doğruyu yanlışa ve yanlışı doğruya değiştirir."

"Doğru. Operatörler bu ifadede hangi sırayla değerlendiriliyor?"

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

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

"Bunların hepsi çok basit."

"Önce DEĞİL (!), sonra VE (&&) ve en sonda VEYA (||).

Parantez eklersek, şunu elde ederiz:

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

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

"Hepsi doğru, aferin. Peki sonuç ne?"

— 1) (a && b) == (doğru && yanlış) == yanlış

2) ((!c) && b) == (yanlış && yanlış) == yanlış

3) (!a) == yanlış

4) yanlış || yanlış || yanlış == yanlış

"Sonuç yanlış."

"Konuyu çok iyi biliyor gibisin. O zaman sana birkaç küçük sır vereceğim."

"İlk olarak, mantıksal ifadeler soldan sağa doğru değerlendirilir."

"İkincisi, burada kısa devre değerlendirmesi kullanılır (hesaplamalar yalnızca gerekliyse yapılır). Nihai sonuç, ifadenin değerlendirilen kısmından zaten biliniyorsa, ifadenin geri kalanı değerlendirilmez."

Örnek
boolean result = (true && false) || (true && true) || (true && false);

"Bu ifade OR (||) operatörü ile ayrılmış üç bölüme ayrılmıştır."

"En az bir kısım doğruysa cevap doğrudur ve başka bir şeye bakılmasına gerek yoktur. Buna göre ifade şu şekilde değerlendirilir:"

1)  İlk kısmı değerlendirin:  (true && false) == false

2)  İkinci kısmı değerlendirin:  (true && true) == true

3) Cevabın doğru olacağı zaten belli olduğu için üçüncü kısmı değerlendirmiyoruz .

"Bu yaklaşım aynı zamanda tembel değerlendirme olarak da adlandırılır."

"Tamam. Peki bunda bu kadar özel olan ne?"

"Hiçbir şey—ifade içindeki yöntemleri çağırmaya başlayana kadar. İfadenin bir kısmı atlanırsa, atlanan kısımdaki metotlar çağrılmayacaktır."

"Fakat bu yaklaşım çok yaygın hale geldi. İşte nedeni:"

Örnek:
Job job = null;

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

"İfade değerlendirildiğinde iş null ise, o zaman job.isDone() çağrısı gerçekleşmez!"

"Aslında, ifadenin ilk kısmı yanlıştır, ardından AND (&&) gelir. Bu nedenle, ifadenin tamamının yanlış olduğu bilinecek ve ikinci kısım gerekli olmayacak."

"Kesinlikle. İyi bir teknik, değil mi?"

"Evet."