В чем разница между | и || или операторы?
Я всегда использовал || (два канала) в выражениях OR, как на С#, так и на PHP. Иногда я вижу один используемый канал: | . В чем разница между этими двумя обычаями? Существуют ли какие-либо оговорки при использовании одного над другим или они взаимозаменяемы?
13 ответов
Как и оператор & и && , двойной оператор является оператором «короткого замыкания».
Если условие 1 истинно, условия 2 и 3 НЕ будут проверяться.
Это проверит условия 2 и 3, даже если 1 уже верно. Поскольку ваши условия могут быть довольно дорогими функциями, вы можете получить хороший прирост производительности, используя их.
Существует одно большое оговорка, NullReferences или аналогичные проблемы. Например:
Если класс равен null, if-statement остановится после class != null — false. Если вы используете только &, он попытается проверить class.someVar и вы получите красивое NullReferenceException . С Or-Operator, который может быть не такой ловушкой, поскольку маловероятно, что вы запускаете что-то плохое, но это что-то, о чем нужно помнить.
Никто никогда не использует сингл & or | однако, если у вас нет дизайна, где каждое условие является функцией, которая должна выполняться. Походит на дизайн запах, но иногда (редко) это чистый способ делать вещи. Оператор & выполняет «эти 3 функции, и если один из них возвращает false, выполните блок else», а | «запускает только блок else, если не возвращает false» — может быть полезным, но, как сказано, часто это дизайнерский запах.
В чем разница между операторами | и || или?
Я всегда использовал || (две трубы) или выражения, как в C# и PHP. Иногда я вижу, что используется одна труба: | . В чем разница между этими двумя обычаи? Есть ли какие-либо оговорки при использовании одного над другим или они взаимозаменяемы?
13 ответов:
как & и && оператор, двойной оператор оператор «короткого замыкания».
например:
если условие 1 истинно, условие 2 и 3 не будут проверены.
это проверит условия 2 и 3, даже если 1 уже верно. Поскольку ваши условия могут быть довольно дорогими функциями, вы можете получить хороший прирост производительности, используя их.
есть одно большое предостережение, NullReferences или подобное проблемы. Например:
если класс равен null, то оператор if-остановится после class != null ложно. Если вы используете только&, он попытается проверить class.someVar и вы получите хороший NullReferenceException . С оператором Or это может быть не так много ловушки, поскольку маловероятно, что вы запускаете что-то плохое, но это то, что нужно иметь в виду.
никто никогда не использует один & или | операторы, хотя, если у вас нет дизайна, где каждое условие является функцией, которая имеет быть казненным. Звучит как дизайн запах, но иногда (редко) это чистый способ сделать вещи. Элемент & оператор выполняет «запуск этих 3 функций, и если одна из них возвращает false, выполните блок else», в то время как | делает «только запустить блок else, если никто не возвращает false» — может быть полезно, но, как уже было сказано, часто это дизайн запах.
есть второе использование | и & оператора, хотя: Побитовые Операции.
|| является логическим оператором OR. Похоже, вы в основном знаете, что это такое. Он используется в условных операторах, таких как if, while и т. д.
возвращает значение true, если условие1 или условие2 истинно.
| — побитовый оператор OR. Он используется для работы с двумя числами. Вы смотрите на каждый бит каждого числа индивидуально, и если один из битов равен 1 по крайней мере в одном из чисел, то результирующий бит будет также равен 1. Вот некоторые из них примеры:
надеюсь, что это имеет смысл.
поэтому, чтобы ответить на последние два вопроса, я бы не сказал, что есть какие-либо предостережения, кроме «знать разницу между двумя операторами.- Они не взаимозаменяемы, потому что делают две совершенно разные вещи.
В чем разница между операторами и
Лучший отвечающий
Вопрос
Знаю вопрос лёгкий, хочу уточнить: если одно условие не совпадает то второе условие не проверяется тем самым уменьшая употребительность программы. Это так?
- Изменено Ziya Ceferov 5 августа 2012 г. 13:58
Ответы
"если одно условие не совпадает то второе условие не проверяется тем самым уменьшая употребительность программы."
в "или", если 1-е условие правильное, то дальше не проверяется ни чего, выполняется блок кода.
если 1-е не правильное, проверяется второе и тд. пока правильное не попадётся.
в "и", если 1-е не правильное (фальсе), то и дальше не идёт, блок кода не выполнится.
проверка идёт до 1-го ложного попадания
- Изменено INFEL8 5 августа 2012 г. 16:34
- Помечено в качестве ответа Ziya Ceferov 5 августа 2012 г. 17:17
- Помечено в качестве ответа Abolmasov Dmitry 24 августа 2012 г. 11:53
Все ответы
"если одно условие не совпадает то второе условие не проверяется тем самым уменьшая употребительность программы."
в "или", если 1-е условие правильное, то дальше не проверяется ни чего, выполняется блок кода.
если 1-е не правильное, проверяется второе и тд. пока правильное не попадётся.
в "и", если 1-е не правильное (фальсе), то и дальше не идёт, блок кода не выполнится.
проверка идёт до 1-го ложного попадания
- Изменено INFEL8 5 августа 2012 г. 16:34
- Помечено в качестве ответа Ziya Ceferov 5 августа 2012 г. 17:17
- Помечено в качестве ответа Abolmasov Dmitry 24 августа 2012 г. 11:53
Центры разработки
- Windows
- Office
- Visual Studio
- Microsoft Azure
- Дополнительно.
Обучение
- Microsoft Virtual Academy
- Канал Channel 9
- Журнал MSDN
Сообщество
- Новости
- Форумы
- Блоги
- Codeplex
Свяжитесь с нами
Программы
- BizSpark (для стартапов)
- Microsoft Imagine (for students)
- Информационный бюллетень
- Конфиденциальность и файлы cookie
- Условия использования
- Товарные знаки
© 2023 Microsoft
В чем разница между == и ===?
Мне кажется, что операторы == и === работают одинаково. Например:
Оператор == короче и часто встречается в других языках программирования. Так зачем === вообще?
![]()
Операторы === и !== являются операторами строгого сравнения. Значит, если операнды имеют разные типы, то не являются равными. Например:
Операторы == и != являются операторами, скажем, грубого сравнения. То есть, если операнды имеют разные типы, JavaScript пытается как-то преобразовать их, чтобы стали сравнимыми. Например:
Интересно заметить, что в отличие от === , оператор == не является транзитивным:
Не очень легко помнить правила этого грубого сравнения, и иногда бывает, что оно работает неожиданным образом. Поэтому, я рекомендую использовать === вместо == .
Даже я не помню мелкие детали оператора == , так что посмотрим в спецификации, пункт 11.9.3: