Перейти к основному содержимому

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

· 4 мин. чтения

1. Введение

В операторах if-else Java мы можем выполнить определенное действие, когда выражение истинно , и альтернативное, когда оно ложно . В этом уроке мы узнаем, как изменить логику с помощью оператора not .

2. Оператор if -else

Начнем с простого оператора 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 выглядит так, как будто это неполный код, и кажется многословным способом обработки только отрицательного условия. Вместо этого мы могли бы попробовать проверить, является ли наше логическое выражение ложным :

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 < b) // Simplified

if (!(count >= 10 || total >= 1000)) // Complex
if (count < 10 && total < 1000) // Simplified

5. Вывод

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

Мы также рассмотрели некоторые распространенные ошибки, возникающие при написании выражений в обратном порядке, и способы их исправления.

Как всегда, исходный код примеров, используемых в этой статье, доступен на GitHub .