Это плохо, чтобы явно сравнить с логическими константами, например если (b == false) в Java? - PullRequest
70 голосов
/ 18 апреля 2010

Разве плохо писать:

if (b == false) //...

while (b != true) //...

Это всегда лучше вместо этого написать:

if (!b) //...

while (!b) //...

Предположительно, нет разницы в производительности (или есть?), Но как вы оцениваете четкость, краткость, ясность, читаемость и т. Д. Между ними?

Обновление

Чтобы ограничить субъективность, я также был бы признателен за любые цитаты из руководящих принципов авторитетного стиля кодирования, над которыми всегда предпочтительнее или которые использовать, когда.


Примечание : имя переменной b используется только в качестве примера, ala foo и bar.

Ответы [ 14 ]

1 голос
/ 07 октября 2015

Одна из причин, по которой первая (b == false) не одобряется, заключается в том, что начинающие часто не осознают, что вторая альтернатива (! B) вообще возможна.Таким образом, использование первой формы может указывать на неправильное представление о булевых выражениях и булевых переменных.Таким образом, использование второй формы стало своего рода сиболетом: когда кто-то пишет это, он, вероятно, понимает, что происходит.

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

1 голос
/ 07 февраля 2013

Обычное правило - никогда не проверять логическое значение.Некоторые утверждают, что дополнительное многословие добавляет ясности.Добавленный код может помочь некоторым людям, но каждый читатель должен будет прочитать больше кода.

Сегодня утром я потерял полчаса, чтобы найти ошибку.Код был

    if ( !strcmp(runway_in_use,"CLOSED") == IPAS_FALSE)
      printf(" ACTIVE    FALSE \n");   else
      printf(" ACTIVE    TRUE \n");

Если бы он был закодирован с обычным соглашением, я бы увидел намного быстрее, что он ошибался:

1 голос
/ 18 апреля 2010

На мой взгляд это просто раздражает. Не то, что я мог бы вызвать шум снова.

0 голосов
/ 31 мая 2010

Я бы сказал, что это плохо.

while (!b) {
    // do something 
}

читается намного лучше, чем

while (b != true) {
    // do something 
}
...