bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
Мне нравится, когда один из них и мой коллега другой. Результат тот же, но что (больше) правильно?Проверьте, истинно ли логическое значение?
bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
Мне нравится, когда один из них и мой коллега другой. Результат тот же, но что (больше) правильно?Проверьте, истинно ли логическое значение?
Почти все, что я видел выражение мнения предпочитает
if (foo)
{
}
В самом деле, я видел много людей критикуют явное сравнение, и я, возможно, даже сделать так себе до сих пор. Я бы сказал, что «короткий» стиль идиоматичен.
EDIT:
Обратите внимание, что это не означает, что строка кода всегда неправильно. Рассмотрим:
bool? maybeFoo = GetSomeNullableBooleanValue();
if (maybeFoo == true)
{
...
}
Это будет компилировать, но без «== правда» не будет, так как нет неявного преобразования из bool?
в bool
.
Согласовано. Единственный раз, когда я использовал подробный (foo == true), является то, что имя переменной foo не является, очевидно, логическим, просто для удобочитаемости. –
+1 для комментария 'bool?'. Я использовал '(возможно, Foo.HasValue && maybeFoo.Value)', но 'maybeFoo == true' намного приятнее. – fredw
@fredw: Еще один вариант - добавить значение по умолчанию: 'if (возможноFoo ?? false)' или 'if (возможноFoo ?? true)'. Но я предпочитаю «==» вообще. –
Это зависит от вашей ситуации.
Я хотел бы сказать, если ваш BOOL имеет хорошее имя, а затем:
if (control.IsEnabled) // Read "If control is enabled."
{
}
бы предпочтительнее.
Если, однако, переменная имеет не столь очевидное имя, проверка на true
была бы полезной для понимания логики.
if (first == true) // Read "If first is true."
{
}
+1 читаемость должна вести ответ - в идеале вы бы переименовали переменную, чтобы вы могли использовать ее. – RedFilter
Если имя не очевидно, возможно, оно должно быть переименовано ... –
При работе со встроенными системами часто нужно проверить состояние одного бита. В C# вполне разумно хранить бит как логическое. В этом случае проверка правильности логического значения может обеспечить более удобочитаемость, чем переименование переменной. Например, рассмотрим бит, который указывает, должны ли данные вводиться или выводиться. Вы можете назвать переменную 'IsOutputBit', но ее можно назвать более понятной как' IODirection'. Я признаю, что для этих целей может быть даже лучше создать перечисление на 2 значения. –
Первый пример почти всегда побеждает в моей книге:
if(foo)
{
}
Это короче и более кратким. Зачем добавлять дополнительную проверку к чему-то, когда это абсолютно не нужно? Просто расточительные циклы ...
Я согласен, однако, что иногда более подробный синтаксис делает вещи более читабельными (что в конечном счете более важно, если производительность приемлема) в ситуациях, когда переменные плохо названы.
Оба правильные.
У вас, вероятно, есть некоторый стандарт кодирования в вашей компании - просто посмотрите, чтобы следовать ему. Если у вас нет - вы должны :)
Стандарт кодирования, который законодательно закрепляет такие вещи, является «организационным запахом» –
Стандарты кодирования с этим уровнем управления микроорганизмами меня раздражают. – RedFilter
@Steve Townsend: С другой стороны, десять разных стилей кодирования в одном файле - это «(dis) организационное зловоние» и их трудно читать. – Piskvor
я лично предпочел бы
if(true == foo)
{
}
нет шансов для ==/= опечаткой и я считаю его более выразительным с точки зрения типа Foo в. Но это очень субъективный вопрос.
Но это C# и 'if (foo = true)' будет генерировать ошибку времени компиляции. – ChrisF
@ChrisF: Нет, не будет. Результатом «foo = true» по-прежнему является bool, так что это нормально для условия «if». Однако он * генерирует предупреждение в компиляторе MS. –
Зачем останавливаться здесь, когда вы могли бы сделать "if (true == (true == (true == foo)))"? Разве это не было бы более выразительным? ;) – Henrik
Не является также «более правильным». Мои личные предпочтения касаются более сжатой формы, но все в порядке. Для меня жизнь слишком коротка, чтобы даже подумать о том, чтобы спорить о таких вещах.
Если вы собираетесь выбрать
if(foo == true)
почему бы не пройти весь путь и сделать
if(foo == true == true == true == true == true == true == true == true == true)
что то же самое.
Я не согласен с тем, что если его четко обозначить (то есть: IsSomething
), то его нормально сравнивать с истинным, но в противном случае вы должны. Если его в выражении if, очевидно, можно сравнить с истинным.
if(monday)
столь же информативными
if(monday == true)
Я также предпочитаю тот же стандарт: не
if(!monday)
в отличие от
if(monday == false)
Это вопрос стиля. Я сомневаюсь, что вы получите окончательный ответ на этот вопрос. – Robaticus
Хотел бы я проголосовать, чтобы закрыть как общий дубликат. Есть waaaaaaay слишком много вопросов по этому поводу, и все они одинаково субъективны. – BoltClock
Jon Skeet нравится первый. Таким образом, это правильный путь ... конец обсуждения! ;-) –