Стандарты Java-кодирования и множественные IF - PullRequest
2 голосов
/ 16 февраля 2011

У меня есть следующие строки кода:

if(
    checker.this()==false ||
    checker.that()==false ||
    checker.what()==true||
    checker.cool()==false ||
    checker.damm()==true
    (...)
  )
{
    option = Option.FALSE;
}

Приблизительно 20 проверок, которые должны быть выполнены. Я обнаружил, что это наиболее «визуально-приемлемая» форма написания этой if с множественной последовательностью OR, но я еще не удовлетворен. Есть ли для этого стандарт кодирования?

Спасибо.

Ответы [ 5 ]

11 голосов
/ 16 февраля 2011

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

if (checkValid(checker)) {...}

private boolean checkValid(Checker checker) {...}

checkValid, конечно, не очень хорошее имя и должно быть заменено чем-то более описательным. В этом конкретном случае вы можете сделать метод check частью объекта «checker».

Вам также следует избегать «что-то == true» и «что-то == false» и использовать «что-то» и «! Что-то». Этот процесс будет полезен, если вы дадите логическим методам соответствующие имена, такие как «isOpen ()», «isEmpty ()», а не «open ()» и «empty ()». "checker.isOpen () &&! checker.isEmpty ()" совершенно ясно читается.

11 голосов
/ 16 февраля 2011

foo==false лучше записать с помощью !foo

Возможно, вы можете переместить этот большой, если в отдельном методе: if (checker.complexConditionMet()) или if (complexConditionMet(checker)).Это улучшит читабельность.

4 голосов
/ 16 февраля 2011

checker.this()==false можно заменить на !checker.this()

3 голосов
/ 16 февраля 2011

Я никогда не слышал о стандарте кодирования для чего-либо подобного.Лично я бы сгруппировал несколько if в метод, учитывающий читабельность.Например, если у вас есть что-то вроде:

if (this || that || what || where || why || cool || wow){ ... }

Вы можете заменить его на:

if (pronouns() || questions() || exclamations()){ ... }
2 голосов
/ 16 февраля 2011

Я бы попытался найти общий смысл между различными проверками и создать из них функции.

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

т.е. что-то вроде этого, что немного "волшебно"

if (a == "world" || b == "dolly" || c == 42 || murder()) {

}

можно сделать более читабельным, изменив его на что-то вроде этого:

if ( canSayHello() || canMeanLife()) {

}
...

boolean canSayHello() {
  return a == "world" || b == "dolly"
}

boolean canMeanLife() {
  return c == 42 || murder();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...