Что является более четкой формой: если(!значение) или если (флаг = = значение)?
Я понимаю, что это субъективный вопрос, поэтому я прошу прощения, если его нужно закрыть, но я чувствую, что он появляется достаточно часто для меня, чтобы задаться вопросом, есть ли общее предпочтение одной формы над другой.
оператор not
if (!value)
или тест на ложные
if (value == false)
18 ответов:
if (!value)
легче/быстрее пройти. Субъективно, как вы сказали. Пока вы последовательны, это главное.EDIT
еще один момент для добавления-пропуск истинных / ложных ключевых слов также должен (надеюсь) заставить кодер использовать более именованные переменные. Переменные Bool всегда должны указывать значение или назначение состояния, например:
if (MyWallet.IsEmpty)
нет причин с вышеизложенным использовать
== false
или== true
как это избыточный. Вышеизложенное сразу же читается человеком.гораздо лучше, чем расшифровать:
if (MyWallet.EmptyStatus == true)
или что-то смешное вроде этого.
мне лично нравится
if ((value == false) == true)
...потому что это проверка того, что заявление
value is false
на самом деле, результатом вычисления которого является логическое значение true...и тогда, очевидно, покрытие обоих поссибилитов добавляет еще больше ясности,
if ((value == false) == true && (value == false) != false)
<grin/>
и для тех из вас, кто является настоящими обжорами для ясности и требует неопровержимой читаемости, я бы предложил
if (((value == false) == true && (value == false) != false) == true)
if (!value)
это всегда яснее, на мой взгляд.
if (value == false)
Я ненавижу это говорить, потому что это звучит как-то подло, но это обычно показывает, что человек, пишущий код, на самом деле не понимает использование булевых значений. Вам не нужно повторно проверять, что такое логическое значение в операторе if. Это излишне.
(лично я был бы раздражен на человека тоже, если бы они назвали переменную
value
вместо чего-то более значимого. У меня такое чувство, что вы опубликовали только код psuedo, я бы определенно Динг, что на отзыв.)редактировать (в ответ на комментарий ниже):
это может выглядеть тривиально, но часто это признак гораздо больших вещей. Честно говоря, большинство людей, которые используют var = = true и т. д. не понимаю. Это просто факт. Я не говорю, что они глупы, или они не должны быть программистами, просто есть что-то, что им нужно просмотреть и изучить. Проблема в том, что когда логика становится намного сложнее, непонимание таких понятий может привести к гораздо большим проблемам в будущем. Некоторые люди говорят: "это стиль.- Вот и хорошо. Реальный вопрос в данном случае: "как это полезно для меня, чтобы сделать это таким образом? Что я или другие люди получают от этого?"Если вы не можете твердо ответить на этот вопрос, то вам нужно спросить себя: "Почему это хорошая идея?"
Я бы никогда использовать
if(value == true)
, Так что просто для согласованности я бы тоже не использовалif(value != false)
.
if(!value)
является более ясным и" элегантным", особенно если вы правильно называете булевы переменные
- все равно
- hasWhatever
- etc
что-то вроде
if (Page.IsPostback == true)
мне кажется излишним
Особое мнение (рода)
С точки зрения компиляции, вы собираетесь получить тот же IL, так что это действительно имеет значение только с точки зрения читаемости.
С этой точки зрения
if(value == false)
более очевидно для случайного читателя, и есть меньше шансов упустить ! перед булом.честно говоря, я использую оба подхода, и в большинстве случаев, все зависит от моего имени переменной. Если это все еще звучит нормально, чтобы сказать "нет "вместо" взрыва", я вероятно, использовать нотацию взрыва
например
if(!gotValue) {} //if (I've) not gotValue //but if(checkValue == false){} //If (I've) not checkValue doesn't quite work here grammatically.
Я использую
Not value
при кодировании в VB, но, как правило, используютvalue == false
при программировании на C#. Я считаю, что восклицательный знак иногда может быть потерян в имени переменной (например !правовой.) Может быть, потому что я опытный ветеран.
Я обычно предпочитаю, если (!значение) тоже, когда я точно знаю, что значение является логическим. Но много раз это может быть строка или число.
количество ноль возвращает ложные в условных выражениях на многих языках (хотя и не на всех); однако строка " 0 " будет оцениваться как правда. Это проблема, особенно в JavaScript, особенно если вы получаете строки JSON с сервера, особенно если сервер написан в PHP (потому что большинство разработчиков PHP достаточно небрежны, чтобы просто взять значения из БД и вызвать json_encode на них, не зная, что БД дает строки и не имея понятия, что все эти нули и единицы, которые они используют в качестве логических полей, будут кодироваться как строки на другом конце, таким образом, все обрабатываются как правда в условные).
Rant over. Мое предложение: будьте явными, особенно если ваш язык является" очень динамичным " типом (т. е. JavaScript, PHP, язык Perl.)
Я не думаю, что это все субъективно. У меня есть никогда видели, как это рекомендуется в более длинной форме. На самом деле все книги и руководства по кодированию и "как быть хорошим программистом", которые я читал, обескураживают его.
он попадает в ту же категорию, что
if (value) { return true; } else { return false; }
OTOH, все ответы, приведенные здесь, делают мое первое утверждение как бы равным неправде.
Я бы предпочел использовать
if(!value)
потому что, в зависимости от имен задействованных переменных, "истинный" случай имеет гораздо больше смысла в соответствии с английской семантикой.рассмотрим один из примеров в этой статье:
if(pane.IsChecked)
читается на английском языке как "если панель проверена".
, если(pane.IsChecked == true
) читается на английском языке как "если ли панель проверяется верно". Это заявление, которое гораздо менее ясно на английском языке, чем должно быть быть.одна из причин, почему мы не пишем на C# код в двоичной читаемости. Если вам предоставляется выбор между кодом, который хорошо течет, когда вы его читаете, и кодом, который этого не делает, встаньте на сторону того, который более читаем. Я не думаю, что добавление "
== true
" делает этот пример более читаемым, и MSDN тоже так не думает.конечно,это довольно маленький пример для беспокойства. Но, как показали некоторые другие ответы, не применяя этот способ мышления к более масштабным случаям может повредить читаемость.
Я пользу
if (!value)
стиль, по крайней мере, для оценки переменных или общих свойств, таких какPage.IsPostback
и тому подобное. Для чего-либо более сложного я склонен заключать выражение в скобки следующим образом:if (!(SomeType.SomeProperty.CallingAMethod(input).GetSomething.BooleanProperty))
просто привлечь немного больше внимания к нему.
в целом, это аргумент для Perl-стиль
unless
иuntil
ключевые слова.
Я предпочитаю второй вариант,
if (value == false)
один. Я с удовольствием используюif (~value)
илиif (not value)
в языках, которые его поддерживают, но это!
просто объединяет waaaaay слишком легко либо с именем переменной, либо с открывающими фигурными скобками или / или / / операторами... по крайней мере на мой взгляд.кроме того, две вещи:
- Я никогда не делаю
if (value == true)
, и я знаю, что я непоследовательна. И хотя последовательность очень важна на мой взгляд, что досадно!
- это просто хуже.- I думаю, что это действительно вопрос личного вкуса,как и дебаты о скобках на новой линии. Я бы никогда не критиковать партнера за глупые мелочи, и мне трудно понять людей, которые будут.
Если условие-это просто проверка одного значения, то
!value
быстрее.однако, когда условие содержит несколько проверок значений, мне гораздо легче читать
value == false
. Как-то легче разобрать несколько проверок на равенство, чем несколько отрицаний значений.
Мне жаль говорить, второй просто выглядит глупо для меня.
Я бы добавил дополнительный уровень, если кто-то предпочитает его:
if( (value==false) == true )
:)
Я на самом деле многие из возможных форм.
на самом деле это не так, как написано в стандартах, но это, как я вижу это:
//if foo is(or exists) if(foo) //if foo is true if(foo == true) //if foo doesn’t exist if(!foo) if foo is false if(foo == false)
поэтому я не вижу == false является излишним.
какое бы состояние ни было
if
блок должен оценить для того, чтобы выполнить должен оценить доtrue
.поэтому, когда
value
иfalse
, почемуif (!value)
позволяетif
блок для выполнения, потому что!
оператор по существу переворачиваетfalse
стоимостьюvalue
доtrue
, тем самым делая результирующее условие в скобках оценить вtrue
один, чтоif
блок должен быть выполнен.
if (value)
,if (!value)
,if (flag == value)
,if (value == true)
,if (value == false)
, в зависимости от того, что должно быть достигнуто, действительный код. Е. Г.if (value == true)
это очень полезно, когдаvalue
является нулевым логическим значением, потому чтоif (value)
выдаст синтаксическую ошибку, аif (value.Value == true)
будет бросать исключение, если вы не убедитесь, чтоvalue
не null передif
блок выполняется.