Булева проверка в условии «если» - PullRequest
16 голосов
/ 26 ноября 2010

Какой из них лучше в стиле Java-кодирования?

boolean status = true;
if (!status) {
    //do sth
} else {
    //do sth
}

или:

if (status == false) {
    //do sth
} else {
    //do sth
}

Ответы [ 10 ]

26 голосов
/ 26 ноября 2010

Я бы посоветовал вам сделать:

if (status) {
    //positive work
} else {
    // negative work
}

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

21 голосов
/ 26 ноября 2010

Бывший, конечно. Последние излишни и только показывают, что вы не очень хорошо поняли концепцию логических значений.

Еще одно предложение: выберите другое имя для переменной boolean. Согласно этому руководству по стилю Java :

- префикс должен использоваться для логических переменных и методов.

isSet, isVisible, isFinished, isFound, isOpen

Это соглашение об именах для boolean используемые методы и переменные Sun для основных пакетов Java.

Использование префикса is решает общую проблему проблема выбора плохих логических имен как status или flag. isStatus или isFlag просто не подходит, а программист вынужден выбирать больше значимые имена.

Методы установки для boolean переменных должен быть установлен префикс как в:

void setFound(boolean isFound);

Есть несколько альтернатив is префикс, который подходит лучше в некоторых ситуации. Это has, can и should префиксы:

boolean hasLicense();
boolean canEvaluate();
boolean shouldAbort = false;
10 голосов
/ 26 ноября 2010

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

Я знаю, что здесь голосую за меня, но я почти всегда буду на стороне более явного кода, чтобы другие могли читать его более точно.Опять же, я бы никогда не использовал булеву переменную с именем "status".Может быть, это успех или просто успех, но «статус», будучи истинным или ложным, ничего не значит для обычного читателя интуитивно.Как вы можете сказать, мне очень нравится читаемость кода, потому что я прочитал так много кода, написанного другими.

7 голосов
/ 26 ноября 2010

Первая или if (status) { /*second clause*/ } else { /* first clause */ }

РЕДАКТИРОВАТЬ

Если вторая форма действительно желательна, то if (false == status) <etc>, хотя и уродливее, вероятно, безопаснее (по опечаткам).

4 голосов
/ 26 ноября 2010

Это на самом деле также зависит от того, как вы называете свою переменную.

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

Если вы назовете свою переменную «status» (как в вашем примере кода), я бы предпочел, чтобы

if(status == false) // if status is false

Onс другой стороны, если вы назвали свою переменную isXXX (например, isReadableCode), то первая будет более читабельной.рассмотрим:

if(!isReadable) { // if not readable
  System.out.println("I'm having a headache reading your code");
}
4 голосов
/ 26 ноября 2010

бывший. Последнее просто добавляет многословие.

3 голосов
/ 26 ноября 2010

Первый.Но просто еще один момент: следующее также сделает ваш код более читабельным:

if (!status) {
    // do false logic
} else {
    // do true logic
}

Обратите внимание, что между if и ( есть дополнительные пробелы, а также перед оператором else.

РЕДАКТИРОВАТЬ

Как отмечает @Mudassir, если в методе, использующем логику, NO есть другой общий код, то лучшим стилем будет:

if (!status) {
    // do false logic
}

// do true logic
2 голосов
/ 26 ноября 2010

Мои личные чувства, когда дело доходит до чтения

if(!status) : if not status

if(status == false) : if status is false

если вы не привыкли! Читать статус. Я не вижу никакого вреда, поступая вторым путем.

если вы используете «активный» вместо состояния «I», если (! Active) более читабельно

1 голос
/ 26 ноября 2010

Первый стиль лучше.Хотя вы должны использовать лучшее имя переменной

0 голосов
/ 26 ноября 2010

Это более удобочитаемая и хорошая практика.

if(!status){
//do sth
}else{
//do sth
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...