Как вводить логическое или
Обновлено: 23.11.2024
В JavaScript есть четыре логических оператора: || (ИЛИ), && (И), ! (НЕТ), ?? (нулевое слияние). Здесь мы рассмотрим первые три, ?? оператор находится в следующей статье.
Хотя они и называются «логическими», их можно применять к значениям любого типа, а не только к логическим. Их результат также может быть любого типа.
Давайте посмотрим подробности.
Оператор «ИЛИ» представлен двумя символами вертикальной линии:
В классическом программировании логическое ИЛИ предназначено только для манипулирования логическими значениями. Если какой-либо из его аргументов равен true, он возвращает true, в противном случае возвращается false.
В JavaScript оператор немного сложнее и мощнее. Но сначала давайте посмотрим, что происходит с логическими значениями.
Есть четыре возможных логических комбинации:
Как мы видим, результат всегда истинен, за исключением случая, когда оба операнда ложны.
Если операнд не является логическим, он преобразуется в логическое значение для оценки.
Например, число 1 считается истинным , а число 0 — ложным :
В большинстве случаев ИЛИ || используется в операторе if для проверки истинности любого из заданных условий.
Мы можем передать дополнительные условия:
ИЛИ "||" находит первое истинное значение
Описанная выше логика несколько классическая. Теперь давайте добавим «дополнительные» возможности JavaScript.
Расширенный алгоритм работает следующим образом.
Дано несколько значений, объединенных ИЛИ:
Операционная || оператор делает следующее:
- Вычисляет операнды слева направо.
- Для каждого операнда преобразует его в логическое значение. Если результат равен true , останавливается и возвращает исходное значение этого операнда.
- Если все операнды были оценены (т. е. все были ложными), возвращает последний операнд.
Значение возвращается в исходном виде без преобразования.
Другими словами, цепочка ИЛИ || возвращает первое истинное значение или последнее, если истинное значение не найдено.
Это приводит к интересному использованию по сравнению с «чистым, классическим, только логическим ИЛИ».
Получение первого истинного значения из списка переменных или выражений.
Например, у нас есть переменные firstName , lastName и nickName, все необязательные (т.е. могут быть неопределенными или иметь ложные значения).
Используем ИЛИ || выбрать тот, у которого есть данные и показать его (или "Анонимный", если ничего не установлено):
Если бы все переменные были ложными, отображалось бы "Аноним".
Оценка короткого замыкания.
Еще одна функция ИЛИ || оператором является так называемая оценка "короткого замыкания".
Это означает, что || обрабатывает свои аргументы до тех пор, пока не будет достигнуто первое истинное значение, после чего значение возвращается немедленно, даже не касаясь другого аргумента.
Важность этой функции становится очевидной, если операнд представляет собой не просто значение, а выражение с побочным эффектом, например присваивание переменной или вызов функции.
В приведенном ниже примере печатается только второе сообщение:
В первой строке оператор ИЛИ || Оператор немедленно останавливает оценку, увидев значение true , поэтому оповещение не запускается.
Иногда люди используют эту функцию для выполнения команд, только если условие в левой части ложно.
Операция AND представлена двумя амперсандами && :
В классическом программировании оператор И возвращает значение true, если оба операнда истинны, и значение false в противном случае:
Операция логического ИЛИ ( || ) (логическая дизъюнкция) для набора операндов истинна тогда и только тогда, когда истинны один или несколько операндов. Обычно он используется с булевыми (логическими) значениями. Когда это так, он возвращает логическое значение. Однако || фактически возвращает значение одного из указанных операндов, поэтому, если этот оператор используется с небулевыми значениями, он вернет нелогическое значение.
Попробуйте
Синтаксис
Описание
Если expr1 можно преобразовать в true, возвращает expr1; иначе возвращает expr2 .
Если значение может быть преобразовано в true , оно является так называемым истинным. Если значение может быть преобразовано в false , это так называемое значение false.
- нуль;
- Нет;
- 0 ;
- пустая строка ("" или '' или ``);
- не определено.
Несмотря на то, что || оператор может использоваться с операндами, которые не являются логическими значениями, его все же можно считать логическим оператором, поскольку его возвращаемое значение всегда можно преобразовать в логический примитив. Чтобы явно преобразовать возвращаемое значение (или вообще любое выражение) в соответствующее логическое значение, используйте двойной оператор НЕ или логический конструктор.
Оценка короткого замыкания
Выражение логического ИЛИ оценивается слева направо, оно проверяется на возможное "короткое замыкание" вычисления по следующему правилу:
(какое-то правдивое выражение) || expr оценивается как истинное выражение.
Короткое замыкание означает, что приведенная выше часть expr не оценивается, поэтому любые побочные эффекты этого не вступают в силу (например, если expr является вызовом функции, вызов никогда не происходит). Это происходит потому, что значение оператора уже определено после оценки первого операнда. См. пример:
Приоритет оператора
Следующие выражения могут показаться эквивалентными, но это не так, поскольку оператор && выполняется перед оператором || оператор (см. приоритет оператора).
Примеры
Использование ИЛИ
В следующем коде показаны примеры || (логическое ИЛИ).
Примечание. Если вы используете этот оператор, чтобы указать значение по умолчанию для какой-либо переменной, имейте в виду, что любое значение falsy не будет использоваться. Если вам нужно только отфильтровать null или undefined , рассмотрите возможность использования оператора объединения nullish.
Правила преобразования логических значений
Преобразование И в ИЛИ
Следующая операция с логическими значениями:
всегда равно:
Преобразование ИЛИ в И
Следующая операция с логическими значениями:
всегда равно:
Удаление вложенных скобок
Поскольку логические выражения оцениваются слева направо, всегда можно удалить круглые скобки из сложного выражения, следуя некоторым правилам.
В большинстве языков выражения, которые возвращают значения логического типа данных, делятся на две группы. Одна группа использует реляционные операторы в своих выражениях, а другая группа использует логические операторы в своих выражениях.
Логические операторы часто используются для создания тестового выражения, управляющего ходом выполнения программы. Этот тип выражения также известен как логическое выражение, поскольку при оценке они создают логический ответ или значение. Есть три общих логических оператора, которые дают логическое значение, манипулируя другими логическими операндами. Символы и/или имена операторов различаются в зависимости от языка программирования:
Вертикальные тире или окантовка находятся на той же клавише, что и обратная косая черта \. Вы используете клавишу SHIFT, чтобы получить его. На большинстве клавиатур она находится над клавишей Enter. На некоторых клавиатурах это может быть сплошная вертикальная линия, а на некоторых печатных шрифтах — сплошная вертикальная линия.
В большинстве языков существуют строгие правила формирования правильных логических выражений. Пример:
6 > 4 && 2 4 и 2
Это выражение содержит два оператора отношения и один логический оператор. Используя правила приоритета операторов, два оператора «реляционного сравнения» будут выполняться перед оператором «логическое и». Таким образом:
правда && правда
правда и правда
Окончательная оценка выражения: true.
На английском языке это можно сказать так: верно, что шесть больше четырех, а два меньше или равно четырнадцати.
При формировании логических выражений программисты часто используют круглые скобки (даже если они технически не нужны), чтобы сделать логику выражения более ясной. Рассмотрим переписанное выше сложное логическое выражение:
(6 > 4) && (2 4) и (2
Большинство языков программирования распознают любое ненулевое значение как истинное. Это делает следующее выражение допустимым:
6 > 4 && 8
6 > 4 и 8
Но помните порядок действий. В английском это шесть больше, чем четыре, а восемь не ноль. Таким образом,
правда && правда
правда и правда
Чтобы сравнить 6 с 4 и 8, вместо этого нужно записать так:
6 > 4 && 6 > 8
6 > 4 и 6 > 8
Это будет оцениваться как false, поскольку:
правда && ложь
правда и ложь
Таблицы правды
Распространенный способ отображения логических взаимосвязей — таблицы истинности.
x | y | x и y |
false | false | false |
false | true | ложь |
истина | ложь | ложь |
истина | true | true |
x | y | x or y |
false | false | false |
false | true | true |
true | false | true |
true td> | true | true |
x | не x |
false | < td>true|
true | false |
Примеры
Я называю это примером того, почему я ненавижу "и" и люблю "или".
Каждый день, когда я возвращался домой из школы с понедельника по четверг; Я спрашивал маму: «Можно я выйду на улицу и поиграю?» Она отвечала: «Если в твоей комнате чисто и домашняя работа сделана, ты можешь выйти на улицу и поиграть». Я научился ненавидеть слово «и». Я мог успеть выполнить одно из заданий и успеть поиграть перед обедом, но и то, и другое… ну, я ненавидел «и».
В пятницу моя мама заняла более спокойную позицию, и когда ее спросили, могу ли я выйти на улицу и поиграть, она ответила: «Если твоя комната чистая или твоя домашняя работа сделана, ты можешь выйти на улицу и поиграть». Я научился быстро убирать свою комнату в пятницу днем. Ну, само собой разумеется, я любил "или".
Для следующего примера просто представьте подростка, разговаривающего со своей матерью. Во время разговора мама говорит: «Ведь твой папа разумный!» Подросток говорит: «Разумно. (короткая пауза) Нет».
Возможно, преподаватели колледжей подумают, что все их студенты готовятся к экзамену. Ха-ха! Нет. Что ж, надеюсь, вы уловили суть.
- 25 36
- 15 > 36 или 3 7 и 5 3 и 17 1 и 7
Ключевые термины
логический оператор Оператор, используемый для создания сложных логических выражений. таблицы истинности Распространенный способ показать логические отношения.
Ссылки
Лицензия
Книга «Основы программирования» Кеннета Лероя Басби и Дэйва Брауншвейга распространяется под лицензией Creative Commons Attribution-ShareAlike 4.0 International License, если не указано иное.
Вопрос: кто-нибудь может сказать мне, как ввести символ для оператора "ИЛИ"? Обычно это две вертикальные линии рядом (примерно так: ll), но я не знаю, как это сделать на клавиатуре компьютера, если только не использую клавиши Shift, Alt, Function и/или Ctrl и т. д. р>
Могу я просто использовать слово "или" вместо символа . Кроме того, является ли логический символ для ИЛИ таким же, как арифметический символ для ИЛИ .
Маршал
автор
Кроме того, является ли логический символ для ИЛИ таким же, как арифметический символ для ИЛИ .
Нет. Логическое ИЛИ — это двойная вертикаль, а арифметическое ИЛИ — одинарная вертикаль.
Кстати, на моей клавиатуре это тоже "shift-backslash", но у меня оно расположено прямо над клавишей возврата.
Проверите ли вы мой код в другой теме, которую я отправил, "Программа: изменение должно/заявлено"? Я знаю, что вы сказали в ответ на это - я все еще работаю над проблемами компиляции. В частности, вы проверите мой код в файле do. while, чтобы увидеть, использует ли я одну вертикальную линию | для оператора Or подходит для этой ситуации? Мы только что говорили об этом в этой ветке сообщений, и эта часть рассматриваемой программы имеет дело с этим. Но у меня возникли проблемы с определением, является ли этот случай логическим или арифметическим (я склоняюсь к арифметике, как это отражено в моем коде). Большое спасибо.
Шериф
Маршал
Первоначально написал Генри Вонг:
Нет. Логическое ИЛИ — это двойная вертикаль, а арифметическое ИЛИ — одинарная вертикаль.
Логическое ИЛИ может быть и тем, и другим | и || - первый всегда оценивает правильный операнд, второй только если первый операнд дает false.
SCJP 1.4 - SCJP 6 - SCWCD 5 - OCEEJBD 6 - OCEJPAD 6
Как задавать вопросы Как отвечать на вопросы
Маршал
автор и интернет-детектив
Первоначально опубликовано Кэмпбеллом Ричи:
Зависит от страны к стране. На моей клавиатуре это внизу слева, Shift-\
Это также зависит от страны. Я нахожусь в Соединенных Штатах, и на моей рабочей клавиатуре и домашней клавиатуре ключ находится в разных местах. Это раздражает, потому что вы должны помнить, где вы находитесь, прежде чем печатать вслепую!
Общее соглашение: выше/ниже/рядом с клавишей "ввод", так что, по крайней мере, есть только два места для поиска.
Шериф
Похоже, что в этом отношении в учебнике "немного" чего-то не хватает.
Когда оба операнда оператора &, ^ или | имеют тип boolean или Boolean, то тип выражения побитового оператора — boolean.
Как заметил Роб, разница в том, что || является условным в том смысле, что правый операнд оценивается только в том случае, если левый операнд оценивается как false. См. JLS — 15.24 Оператор условного ИЛИ ||.
(В этом контексте кажется, что в учебнике логическое значение может рассматриваться как один бит, что я считаю ошибкой, поскольку размер логического значения Java не определен.)
[ 16 ноября , 2008: Сообщение отредактировано: marc weber ]
Читайте также: