Логически оператори - 1

„Здрасти, Амиго!“

„Сега ще имаме малък урок за логическите оператори.“

„Какви логически оператори знаете?“

— ИЛИ (||), И (&&), НЕ(!)

"Да. Добра работа. И помниш ли How работят?"

— Да.

"ИЛИ дава вярно, когато поне един операнд е верен."

"И дава истина, когато и двата операнда са верни."

"NOT променя true на false и false на true."

„Точно така. И в Howъв ред се оценяват операторите в този израз?“

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

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

— Всичко това е много просто.

„Първо НЕ (!), след това И (&&) и след това ИЛИ (||) в самия край.“

Ако добавим скоби, ще получим:

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

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

„Всичко е правилно, браво. И Howъв е резултатът?“

— 1) (a && b) == (вярно && невярно) == невярно

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

3) (!a) == невярно

4) невярно || невярно || невярно == невярно

"Резултатът е фалшив."

"Изглежда, че познавате темата перфектно. Тогава ще ви кажа няколко малки тайни."

„Първо, логическите изрази се оценяват отляво надясно.“

„Второ, тук се използва оценка на късо съединение (изчисленията се извършват само ако е необходимо). Ако крайният резултат вече е известен от оценяването на част от израза, тогава останалата част от израза не се оценява.“

Пример
boolean result = (true && false) || (true && true) || (true && false);

„Този ​​израз е разделен на три части, разделени от оператора ИЛИ (||).“

„Ако поне една част е вярна, тогава отговорът е верен и нищо друго не трябва да се взема предвид. Съответно изразът се оценява по следния начин:“

1)  Оценете първата част:  (true && false) == false

2)  Оценете втората част:  (true && true) == true

3) Не оценяваме третата част, тъй като вече е ясно, че отговорът ще бъде верен .

„Този ​​подход се нарича още мързелива оценка.“

"Добре. И Howво му е толкова специално?"

"Нищо - докато не започнете да извиквате методи вътре в израза. Ако част от израза е пропусната, тогава методите в пропуснатата част няма да бъдат извикани."

„Но този подход стана много често срещан. Ето защо:“

Пример:
Job job = null;

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

"Ако заданието е нула, когато изразът се оценява, тогава извикването на job.isDone() няма да се случи!"

„Наистина, първата част от израза е невярна, която е последвана от И (&&). Така че целият израз ще бъде известен като невярна и втората част няма да е необходима.“

"Точно така. Това е добра техника, нали?"

— Да.