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