Разница между логическим или (||) и побитовым (|) в JS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Подводя итог, || применяется для логической операции ИЛИ. Он обладает свойством короткого замыкания – если первый аргумент истинен, второй не будет вычислен. Оператор предназначен для использования в логических выражениях. Относительно оператора |, он выполняет побитовую операцию ИЛИ, проверяя оба аргумента, что делает его незаменимым при работе с битами, но относительно менее эффективным в булевых операциях.

Пример оптимизации булевых вычислений при использовании ||:

Java
Скопировать код
if (isHuman() || isCleverbot()) {
    // Это умный робот в облике человека? 🕵️ Мы так и не узнаем, если вызов isCleverbot() не потребуется.
}

При использовании | оба аргумента будут проверены:

Java
Скопировать код
if (isHuman() | isCleverbot()) {
    // Не доверяете технологиям? Здесь оба условия проверяются всегда.
}
Кинга Идем в IT: пошаговый план для смены профессии

Вникнем в детали

Давайте разберемся подробнее, когда уместно использовать | вместо ||.

Применение || и &&

|| и && являются незаменимыми инструментами в защитном программировании. Они помогают предотвратить NullPointerException, облегчая проверки на null.

Java
Скопировать код
if (dao != null && dao.fetchData() != null) {
    // Вот и отсечён путь к NullPointerException!
}

Используем | для работы с битами, а не для логики

Использование | в логических операциях можно сравнить с маханием мечом перед уже сложившим оружие врагом – это излишне и расточительно. Оператор | предназначен прежде всего для работы с битами, где он превосходно себя проявляет.

Java
Скопировать код
int flags = CAN_READ | CAN_WRITE;
if ((userPermissions & flags) == flags) {
    // Пользователь обладает правами на чтение И запись? Вот это битовая магия!
}

Избегаем смешения | и ||

Использование | и || в одном контексте может привести к обеспокоительным и нежелательным результатам, особенно при работе с нечисловыми типами данных. При написании эффективного и безошибочного кода крайне важно иметь четкое понимание сферы применения каждого оператора и контекста его использования.

Визуализация

Представьте каждый из операторов как выбор пути на развилке:

Markdown
Скопировать код
Вы стоите на разветвлении дорог:
Путь 1 (||): Проверяем состояние Пути 1. Если путь свободен (🌞), двигаемся дальше, не обращая внимания на Путь 2. Если нет (🌩️), приступаем к проверке Пути 2.
Путь 2 (|): Мы обязаны проверить условия обоих путей, 1 и 2, вне зависимости от их состояния (🌞🌩️).

Короткое замыкание (||):

Markdown
Скопировать код
Если Путь 1 оказался свободен 🌞, продолжаем путешествие, не беспокоясь о Пути 2 и экономя силы.

Без короткого замыкания (|):

Markdown
Скопировать код
Независимо от безопасности Пути 1, Путь 2 следует проверить в любом случае. Наблюдаются препятствия? Жаль, но мы не можем их игнорировать! 🏃‍♂️

Глубокое погружение: эффективность кодирования, подводные камни и особенности языка

Выбор подходящего оператора может значительно влиять на конечный результат работы кода.

Эффективное использование короткого замыкания

Использование операторов || и && позволяет реализовывать условное выполнение операций, оптимизируя код и избегая лишних действий.

|| и && в JavaScript

В JavaScript эти операторы используются не только для логических выражений. Они служат также для определения условий и задания значений по умолчанию. Понимание таких особенностей языка позволяет писать более качественный и эффективный код.

Значимость приоритета операторов

Неправильное понимание разницы между | и логическими операторами, таким как ||, может привести к ошибкам из-за отличий в приоритете этих операций. Всегда обращайте внимание на порядок выполнения операций или используйте скобки для явного указания приоритета.