2010-11-26 4 views
13

который лучше в Java код style?boolean check in if()

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

или

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

`переключатель (статус) {случай верно: {...; ломать; } по умолчанию: { ...; ломать; }} `:) – tchrist 2010-12-01 05:22:31

+0

@tchrist: ... и ваша точка? – missingfaktor 2010-12-01 11:19:03

+0

switch (boolean) ошибочен, Boolean не может быть в переключателе – ashishdhiman2007 2017-04-14 10:44:03

ответ

17

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

Еще одно предложение: Выберите другое имя для вашей переменной boolean. В соответствии с this Java style guide:

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

isSet, isVisible, isFinished, isFound, isOpen

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

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

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

void setFound(boolean isFound);

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

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false; 
4

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

0

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

if(!status){ 
//do sth 
}else{ 
//do sth 
} 
+0

, за исключением того, что я бы перевернул предложения, которые вы просто проверяете, если (статус) – 2010-11-26 08:44:27

+0

Кроме того, вы можете переформулировать имя переменной префиксом «is-», чтобы указать, какое значение по умолчанию является. – 2013-03-23 05:01:08

6

Первый из них, или if (status) { /*second clause*/ } else { /* first clause */ }

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

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

+0

+1 для (false == status), который также дает указания для `if (0 == i)` вопрос не задан – subsub 2011-05-02 14:06:17

22

Я хотел бы предложить, что вы делаете:

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

== В испытаниях, в то время как очевидно, излишние, также рискует одной = опечатки, которая приведет к заданию.

+2

+1 для указания на опасность ошибочного ввода одного «=» – RAY 2010-11-26 05:40:54

3

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

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

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

EDIT

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

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

// do true logic 
8

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

Одна из причин, по которой я отошел от Perl, состоит в том, что он так сильно полагается на пунктуацию, которая намного медленнее интерпретировать при чтении.

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

1

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

3

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

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

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

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"); 
} 
2

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

if(!status) : if not status 

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

, если вы не привыкли к чтению статуса!. Я не вижу вреда, делая второй путь.

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