Лучшая практика настройки возвращаемого значения (используйте else или?)

Всякий раз, когда вы хотите вернуть значение из метода, но все, что вы вернете, зависит от какого-либо другого значения, вы обычно используете ветвление:

int calculateSomething() {
  if (a == b) {
    return x;
  } else {
    return y;
  }
}

Другой способ написать это:

int calculateSomething() {
  if (a == b) {
    return x;
  }
  return y;
}

Есть ли причина избежать того или другого? Оба позволяют добавлять «else if» -clauses без проблем. Оба обычно генерируют ошибки компилятора, если вы добавите что-нибудь внизу.

Примечание. Я не мог найти дубликатов, хотя существует множество вопросов о том, должны ли сопровождающие фигурные фигурные скобки быть в отдельной строке. Так что давайте не будем этого делать.

6 голосов | спросил Deckard 29 J0000006Europe/Moscow 2011, 11:52:56

5 ответов


8

Я использую оба метода, в зависимости от метода. Например, в методе, который что-то решает, я думаю, что

public boolean isSunday(Calendar cal) {
  if (Calendar.SUNDAY == cal.get(Calendar.DAY_OF_WEEK))
    return true;
  else
    return false;
}

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

Если метод вычисляет что-либо или извлекает информацию, мне больше нравится второй вариант:

public String getAnswer(int question) {
  if (isAvailable(preciseAnswerService)
    return preciseAnswerService.answer(question);
  return defaultAnswer(question);
}

Здесь тот факт, что один ответ выбран по другому, зависит от состояния answerService. Мы могли бы расширить этот метод позже, добавив точныйAnswerCache или получить ответ из другого места.

ответил wallenborn 29 J0000006Europe/Moscow 2011, 16:41:33
10

Я предпочитаю третий подход, особенно при работе с булевыми:

int calculateSomething() { 
    int value = y; // whatever the default value is
    if (a == b) { 
        value = x;
    }

    return value;
}

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

ответил Wayne Molina 29 J0000006Europe/Moscow 2011, 16:40:05
5

Я предпочитаю иметь одно предложение return, которое не находится внутри цикла, if- или else-branch. Поэтому я выбираю вторую версию.

Моя причина: в PL /SQL (и, возможно, на других языках тоже) компилятор не замечает пропущение оператора return, но программа выдает исключение, если функция не заканчивается явным оператором return.

ответил user281377 29 J0000006Europe/Moscow 2011, 12:39:53
4

Как отмечает Lenny222 в комментариях, это действительно просто вопрос вкуса .

Я лично предпочитаю вторую форму, так как она

  • более краткий
  • более читаемый (imo)

Я думаю, что else-предложение в первой форме просто избыточно, и поэтому добавляет беспорядок.

ответил fretje 29 J0000006Europe/Moscow 2011, 12:28:50
4

В Java вы можете написать:

int calculateSomething() { 
    return a == b ? x : y;
}
ответил cl-r 1 PM00000050000000731 2011, 17:54:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132