Подтвердить что ты не робот

Проверьте, истинно ли логическое значение?

bool foo = true;

// Do this?
if (foo)
{
}

// Or this?
if (foo == true)
{
}

Мне нравится один из них, а мой коллега - другой. Результат тот же, но что (больше) правильно?

4b9b3361

Ответ 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

Ничто не является "более правильным". Мои личные предпочтения касаются более сжатой формы, но все в порядке. Для меня жизнь слишком коротка, чтобы даже думать о том, чтобы спорить о том, как это происходит.