Използване на оператора Not Not в условията If в Java

1. Въведение

В инструкциите if-else на Java можем да предприемем определено действие, когато изразът е истина , и алтернатива, когато е невярно . В този урок ще научим как да обърнем логиката с помощта на оператора not .

2. ако-друго S tatement

Нека започнем с едно просто изказване if-else :

boolean isValid = true; if (isValid) { System.out.println("Valid"); } else { System.out.println("Invalid"); }

Ами ако нашата програма трябва да се справи само с отрицателния случай? Как бихме пренаписали горния пример?

Една от опциите е просто да премахнете кода в блока if :

boolean isValid = true; if (isValid) { } else { System.out.println("Invalid"); }

Обаче празен блок if изглежда, че може да е непълен код, и изглежда дълъг начин за обработка само на отрицателното състояние. Вместо това бихме могли да опитаме да тестваме, ако нашият логически израз изчисли на false :

boolean isValid = true; if (isValid == false) { System.out.println("Invalid"); }

Горната версия е сравнително лесна за четене, макар че може да е по-трудно да се направи, ако логическият израз е по-сложен. Java обаче има алтернатива за нас под формата на оператора not :

boolean isValid = true; if (!isValid) { System.out.println("Invalid"); }

3. Не оператор

Операторът not е логичен оператор, представен в Java от ! символ. Това е единствен оператор, който приема логическа стойност като свой операнд. Операторът not работи, като инвертира (или отрича) стойността на своя операнд .

3.1. Прилагане на оператора not към булева стойност

Когато се прилага към булева стойност, операторът not превръща true в false и false в true .

Например:

System.out.println(!true); // prints false System.out.println(!false); // prints true System.out.println(!!false); // prints false

3.2. Прилагане на оператора not към булев израз

Тъй като not не е унарен оператор, когато искате да не резултатът от израз, трябва да заобиколите този израз в скоби, за да получите правилния отговор. Изразът в скобата се оценява първо и след това операторът not обръща резултата си.

Например:

int count = 2; System.out.println(!(count > 2)); // prints true System.out.println(!(count <= 2)); // prints false
boolean x = true; boolean y = false; System.out.println(!(x && y)); // prints true System.out.println(!(x || y)); // prints false 

Трябва да отбележим, че когато се отрича изразът, влизат в сила законите на Де Морган. С други думи, всеки член в израза се отрича и операторът се обръща. Това може да ни помогне да опростим по-трудни за четене изрази.

Например:

!(x && y) is same as !x || !y !(x || y) is same as !x && !y !(a <3 && b == 10) is same as a>= 3 || b != 10 

4. Някои често срещани клопки

Използването на оператора not понякога може да наруши четливостта на нашия код. Отрицателните могат да бъдат по-трудни за разбиране от положителните. Нека разгледаме някои примери.

4.1. Двойни отрицания

Тъй като операторът not е отрицателен оператор, използването му с променливи или функции, които имат отрицателно име, може да доведе до труден за четене код. Това е подобно на естествените езици, където двойните негативи често се считат за трудни за разбиране.

Например:

if (product.isActive()) {...}

чете по-добре от

if (!product.isNotActive()) {...}

Въпреки че нашият API може да не предоставя метод isActive , ние можем да създадем такъв, за да улесним четливостта.

4.2. Сложни условия

Операторът not понякога може да направи и без това сложен израз още по-труден за четене и разбиране. Когато това се случи, можем да опростим кода чрез обръщане на условието или чрез извличане на методи. Нека разгледаме някои примери за усложнения, усложнени от оператора not и как можем да ги опростим, като обърнем условието:

if (!true) // Complex if (false) // Simplified if (!myDate.onOrAfter(anotherDate)) // Complex if (myDate.before(anotherDate)) // Simplified if (!(a >= b)) // Complex if (a = 10 || total >= 1000)) // Complex if (count < 10 && total < 1000) // Simplified

5. Заключение

В тази статия обсъдихме оператора not и как може да се използва с булеви стойности, изрази и в if-else изрази.

Разгледахме и някои често срещани клопки, причинени от писането на изрази в обратната им страна и как да ги поправим.

Както винаги изходният код за примерите, използвани в тази статия, е достъпен в GitHub.