Булева проверка в условии "если"
Какой из них лучше стиля программирования Java?
boolean status = true;
if (!status) {
//do sth
} else {
//do sth
}
или же:
if (status == false) {
//do sth
} else {
//do sth
}
Ответы
Ответ 1
Бывший, конечно. Последнее является излишним и только показывает, что вы не поняли концепцию булевых очень хорошо.
Еще одно предложение: выберите другое имя для вашей переменной 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;
Ответ 2
Я бы предположил, что вы:
if (status) {
//positive work
} else {
// negative work
}
Тест ==
, хотя и явно избыточный, также подвержен риску одиночной опечатки =
, которая приведет к назначению.
Ответ 3
Если вы посмотрите на альтернативы на этой странице, конечно, первый вариант выглядит лучше, а второй - более подробным. Но если вы просматриваете большой класс, который написал кто-то другой, эта многословие может изменить разницу между реализацией теста или нет.
Одна из причин, по которой я отошел от Perl, состоит в том, что он так сильно опирается на пунктуацию, которая гораздо медленнее интерпретировать при чтении.
Я знаю, что меня здесь нет, но я почти всегда буду с более явным кодом, чтобы другие могли читать его более точно. Опять же, я бы никогда не использовал логическую переменную, называемую "статус". Может быть isSuccess или просто успех, но "статус", являющийся истинным или ложным, ничего не значит для случайного читателя интуитивно. Как вы можете сказать, я очень хорошо читаю код, потому что читаю так много кода, написанных другими.
Ответ 4
Первый, или if (status) { /*second clause*/ } else { /* first clause */ }
ИЗМЕНИТЬ
Если вторая форма действительно нужна, то if (false == status) <etc>
, хотя и более уродливая, вероятно, более безопасна (wrt typos).
Ответ 5
Первый. Последний просто добавляет многословие.
Ответ 6
Это также зависит от того, как вы называете свою переменную.
Когда люди спрашивают "что лучше", это подразумевает, что оба они верны, поэтому это просто вопрос, который легче читать и поддерживать.
Если вы назовете свою переменную "статус" (что имеет место в вашем примере кода), я бы предпочел увидеть
if(status == false) // if status is false
С другой стороны, если вы назвали вашу переменную isXXX (например, isReadableCode), то первая более читаема. рассмотреть следующие вопросы:
if(!isReadable) { // if not readable
System.out.println("I'm having a headache reading your code");
}
Ответ 7
Первый. Но еще один момент, следующий код также сделает ваш код более читаемым:
if (!status) {
// do false logic
} else {
// do true logic
}
Обратите внимание, что между if
и (
есть дополнительные пробелы, а также перед оператором else
.
ИЗМЕНИТЬ
Как отмечено @Mudassir, если в методе, использующем логику, существует NO другой общий код, тогда лучшим стилем будет:
if (!status) {
// do false logic
}
// do true logic
Ответ 8
Мое личное чувство, когда дело доходит до чтения
if(!status) : if not status
if(status == false) : if status is false
если вы не привыкли к чтению статуса. Я не вижу вреда, делая второй путь.
если вы используете "active" вместо статуса I, если (! active) более читается
Ответ 9
Первый стиль лучше. Хотя вы должны использовать лучшее имя переменной
Ответ 10
Это более читаемая и хорошая практика.
if(!status){
//do sth
}else{
//do sth
}
Ответ 11
String result = isReadable() ? "This is readable" : "This is Not readable";