Проверьте, истинно ли логическое значение?
bool foo = true;
// Do this?
if (foo)
{
}
// Or this?
if (foo == true)
{
}
Мне нравится один из них, а мой коллега - другой. Результат тот же, но что (больше) правильно?
Ответы
Ответ 1
Почти все, кого я видел, выражают мнение, предпочитающее
if (foo)
{
}
Действительно, я видел, как многие критикуют явное сравнение, и я, возможно, даже сделал это сам до этого. Я бы сказал, что "короткий" стиль идиоматичен.
EDIT:
Обратите внимание, что это не означает, что строка кода всегда неверна. Рассмотрим:
bool? maybeFoo = GetSomeNullableBooleanValue();
if (maybeFoo == true)
{
...
}
Это будет скомпилировано, но без "== true" оно не будет, поскольку нет никакого неявного преобразования из bool?
в bool
.
Ответ 2
Это зависит от вашей ситуации.
Я бы сказал, если ваш bool имеет хорошее имя, то:
if (control.IsEnabled) // Read "If control is enabled."
{
}
будет предпочтительнее.
Если, однако, переменная имеет не столь очевидное имя, проверка на true
будет полезна для понимания логики.
if (first == true) // Read "If first is true."
{
}
Ответ 3
Если вы собираетесь выбрать
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)
Ответ 4
Первый пример почти всегда выигрывает в моей книге:
if(foo)
{
}
Это короче и кратким. Зачем добавлять дополнительную проверку к чему-то, когда это абсолютно не нужно? Просто растрачивая циклы...
Я согласен, однако, что иногда более подробный синтаксис делает вещи более читабельными (что в конечном счете более важно, если производительность приемлема) в ситуациях, когда переменные плохо названы.
Ответ 5
Оба правильные.
У вас, вероятно, есть некоторый стандарт кодирования в вашей компании - просто смотрите, чтобы следовать ему. Если у вас его нет - вы должны:)
Ответ 6
я лично предпочел бы
if(true == foo)
{
}
нет возможности для ==/= mistype, и я нахожу его более выразительным с точки зрения типа foo.
Но это очень субъективный вопрос.
Ответ 7
Ничто не является "более правильным". Мои личные предпочтения касаются более сжатой формы, но все в порядке. Для меня жизнь слишком коротка, чтобы даже думать о том, чтобы спорить о том, как это происходит.