Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс JavaScript
/

Отрицание

JavaScript: Отрицание

Наряду с логическими операторами И (&&) и ИЛИ (||), часто используется операция «отрицание». Она меняет логическое значение на противоположное. В JavaScript отрицанию соответствует унарный оператор !:

!true;  // false
!false; // true

Например, если есть функция, проверяющая чётность числа, то с помощью отрицания можно выполнить проверку нечётности:

const isEven = (number) => number % 2 === 0;

isEven(10);  // true
!isEven(10); // false

Мы просто добавили ! слева от вызова функции и получили обратное действие. Отрицание позволяет выражать задуманные правила в коде без написания новых функций.

Двойное отрицание

А что, если написать !!isEven(10)? Внезапно, но код сработает. В логике двойное отрицание равносильно отсутствию отрицания:

isEven(10);   // true
!isEven(10);  // false
!!isEven(10); // true

Комбинирование с && и ||

! можно комбинировать с && и ||. Среди логических операторов у отрицания наивысший приоритет, поэтому оно применяется первым:

!true || true;   // (!true) || true   => false || true  => true
!true && false;  // (!true) && false  => false && false => false

Скобки меняют порядок вычисления:

!(true || true);  // !true  => false
!(true && false); // !false => true

Практический пример — функция проверяет, может ли водитель сесть за руль: нужны права и трезвость:

const canDrive = (hasLicense, isDrunk) => hasLicense && !isDrunk;

console.log(canDrive(true, false)); // => true  (есть права, трезвый)
console.log(canDrive(true, true));  // => false (есть права, но пьяный)
console.log(canDrive(false, false)); // => false (нет прав)

Законы де Моргана

При работе со сложными логическими выражениями бывает нужно инвертировать их или переписать в эквивалентную, более читаемую форму. Для этого существуют законы де Моргана — два правила, описывающих, как отрицание распределяется по составному выражению:

!(a && b)  ===  !a || !b
!(a || b)  ===  !a && !b

Первый закон: отрицание конъюнкции равно дизъюнкции отрицаний. Проверим:

!(true && false);     // !false => true
!true || !false;      // false || true => true

Второй закон: отрицание дизъюнкции равно конъюнкции отрицаний:

!(true || false);     // !true => false
!true && !false;      // false && true => false

На практике законы де Моргана помогают упрощать условия. Например, вместо !(isAdmin || isModerator) можно написать !isAdmin && !isModerator — читается как «не администратор и не модератор».

Задание

Напишите две функции:

  1. isPalindrome(str) — возвращает true, если строка является палиндромом (читается одинаково в обоих направлениях).
  2. isNotPalindrome(str) — возвращает true, если строка не является палиндромом.
isPalindrome('level');    // => true
isPalindrome('hello');    // => false
isNotPalindrome('level'); // => false
isNotPalindrome('hello'); // => true

Используйте метод .split(''), .reverse(), .join('') для разворота строки.

Коммерческий опыт и Трудоустройство

Полезное

  • Законы Де Моргана

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
/
Программирование
/
Курс JavaScript
/

Отрицание

JavaScript: Отрицание

Наряду с логическими операторами И (&&) и ИЛИ (||), часто используется операция «отрицание». Она меняет логическое значение на противоположное. В JavaScript отрицанию соответствует унарный оператор !:

!true;  // false
!false; // true

Например, если есть функция, проверяющая чётность числа, то с помощью отрицания можно выполнить проверку нечётности:

const isEven = (number) => number % 2 === 0;

isEven(10);  // true
!isEven(10); // false

Мы просто добавили ! слева от вызова функции и получили обратное действие. Отрицание позволяет выражать задуманные правила в коде без написания новых функций.

Двойное отрицание

А что, если написать !!isEven(10)? Внезапно, но код сработает. В логике двойное отрицание равносильно отсутствию отрицания:

isEven(10);   // true
!isEven(10);  // false
!!isEven(10); // true

Комбинирование с && и ||

! можно комбинировать с && и ||. Среди логических операторов у отрицания наивысший приоритет, поэтому оно применяется первым:

!true || true;   // (!true) || true   => false || true  => true
!true && false;  // (!true) && false  => false && false => false

Скобки меняют порядок вычисления:

!(true || true);  // !true  => false
!(true && false); // !false => true

Практический пример — функция проверяет, может ли водитель сесть за руль: нужны права и трезвость:

const canDrive = (hasLicense, isDrunk) => hasLicense && !isDrunk;

console.log(canDrive(true, false)); // => true  (есть права, трезвый)
console.log(canDrive(true, true));  // => false (есть права, но пьяный)
console.log(canDrive(false, false)); // => false (нет прав)

Законы де Моргана

При работе со сложными логическими выражениями бывает нужно инвертировать их или переписать в эквивалентную, более читаемую форму. Для этого существуют законы де Моргана — два правила, описывающих, как отрицание распределяется по составному выражению:

!(a && b)  ===  !a || !b
!(a || b)  ===  !a && !b

Первый закон: отрицание конъюнкции равно дизъюнкции отрицаний. Проверим:

!(true && false);     // !false => true
!true || !false;      // false || true => true

Второй закон: отрицание дизъюнкции равно конъюнкции отрицаний:

!(true || false);     // !true => false
!true && !false;      // false && true => false

На практике законы де Моргана помогают упрощать условия. Например, вместо !(isAdmin || isModerator) можно написать !isAdmin && !isModerator — читается как «не администратор и не модератор».

Задание

Напишите две функции:

  1. isPalindrome(str) — возвращает true, если строка является палиндромом (читается одинаково в обоих направлениях).
  2. isNotPalindrome(str) — возвращает true, если строка не является палиндромом.
isPalindrome('level');    // => true
isPalindrome('hello');    // => false
isNotPalindrome('level'); // => false
isNotPalindrome('hello'); // => true

Используйте метод .split(''), .reverse(), .join('') для разворота строки.

Коммерческий опыт и Трудоустройство

Полезное

  • Законы Де Моргана

Команда проекта находится в телеграм-сообществе. Там можно задать любой вопрос и повлиять на проект

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются
← ПредыдущийСледующий →
← ПредыдущийСледующий →
← ПредыдущийСледующий →

Ваше упражнение проверяется по этим тестам

// @ts-check

import { expect, test } from 'vitest';
import f from './index.js';

test('logical negation', () => {
  expect(f('wow')).toBe(false);
  expect(f('hexlet')).toBe(true);
  expect(f('asdffdsa')).toBe(false);
  expect(f('Wow')).toBe(false);
});
← ПредыдущийСледующий →

Решение учителя откроется через:

20:00

waiting_clock
← ПредыдущийСледующий →