В чем разница между операторами и

от admin

В чем разница между | и || или операторы?

Я всегда использовал || (два канала) в выражениях 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
Читать:
0x800f0247 что за ошибка

Ответы

"если одно условие не совпадает то второе условие не проверяется тем самым уменьшая употребительность программы."
в "или", если 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
  • Условия использования
  • Товарные знаки

logo© 2023 Microsoft

В чем разница между == и ===?

Мне кажется, что операторы == и === работают одинаково. Например:

Оператор == короче и часто встречается в других языках программирования. Так зачем === вообще?

Pavel Mayorov's user avatar

Операторы === и !== являются операторами строгого сравнения. Значит, если операнды имеют разные типы, то не являются равными. Например:

Операторы == и != являются операторами, скажем, грубого сравнения. То есть, если операнды имеют разные типы, JavaScript пытается как-то преобразовать их, чтобы стали сравнимыми. Например:

Интересно заметить, что в отличие от === , оператор == не является транзитивным:

Не очень легко помнить правила этого грубого сравнения, и иногда бывает, что оно работает неожиданным образом. Поэтому, я рекомендую использовать === вместо == .

Даже я не помню мелкие детали оператора == , так что посмотрим в спецификации, пункт 11.9.3:

Похожие статьи