Стиль программирования: стоит ли возвращаться раньше, если условие охраны не выполняется? - PullRequest
30 голосов
/ 28 мая 2010

Одна вещь, которую я иногда задавался вопросом: какой стиль лучше из двух, показанных ниже (если есть)? Лучше ли вернуться немедленно, если условие охраны не было выполнено, или вы должны выполнять другие действия, только если условие охраны удовлетворено ?

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

// Style 1
public SomeType aMethod() {
  SomeType result = null;

  if (!guardCondition()) {
    return result;
  }

  doStuffToResult(result);
  doMoreStuffToResult(result);

  return result;
}

// Style 2
public SomeType aMethod() {
  SomeType result = null;

  if (guardCondition()) {
    doStuffToResult(result);
    doMoreStuffToResult(result);
  }

  return result;
}

Ответы [ 12 ]

0 голосов
/ 28 мая 2010

Я бы сказал "Это зависит от ..."

В ситуациях, когда мне нужно выполнить последовательность очистки с более чем 2 или 3 строками, прежде чем покинуть функцию / метод, я бы предпочел стиль 2, поскольку последовательность очистки должна быть записана и изменена только один раз. Это означает, что ремонтопригодность проще.

Во всех остальных случаях я бы предпочел стиль 1.

0 голосов
/ 28 мая 2010

Я предпочитаю использовать метод № 1 сам, он логически проще для чтения и также логически больше похож на то, что мы пытаемся сделать. (если случится что-то плохое, выйдите из функции СЕЙЧАС, не проходите мимо, не собирайте $ 200)

Кроме того, большую часть времени вы захотите вернуть значение, которое не является логически возможным результатом (т.е. -1), чтобы указать пользователю, вызвавшему функцию, что функция не выполнилась должным образом, и предпринять соответствующие действия. Это лучше подходит и для метода №1.

...