вторник, 23 мая 2017 г.

много возвращаемых значений - плохая идея в ООП

Эти дебаты очень старые, но у меня есть, что сказать. Вопрос заключается в том, может ли метод иметь несколько операторов return или всегда один. Ответ может удивить вас: в чистом объектно-ориентированном мире метод должен иметь один оператор return и ничего больше. Да, просто заявление о возврате и все. Других операторов нет. Просто return. Все аргументы в пользу нескольких операторов возврата идут вразрез с самой идеей объектно-ориентированного программирования.
 

Это классический пример:
public int max(int a, int b) {
  if (a > b) {
    return a;
  }
  return b;
}
У вышеприведенного кода есть два оператора return, и он короче, чем этот, с единственным возвратом:
public int max(int a, int b) {
  int m;
  if (a > b) {
    m = a;
  } else {
    m = b;
  }
  return m;
}
Более подробный, менее читаемый и медленный, не так ли? Правильно.
Это код в чистом объектно-ориентированном мире:
public int max(int a, int b) {
  return new If(
    new GreaterThan(a, b),
    a, b
  );
}
Что вы думаете сейчас? Нет значений или операторов. Нет, if и нет сравнения >. Вместо этого есть объекты класса If и GreaterThan.
Это чистый и чистый объектно-ориентированный подход.
Однако Java не имеет этого. Java (и многие другие псевдо-ООП-языки) дает нам такие операторы, как if, else, switch, for, while и т.д., Вместо того, чтобы давать встроенные классы, что бы делать то же самое. Из-за этого мы продолжаем думать в терминах процедур и продолжаем говорить о том, что два оператора return лучше одного.
Если ваш код действительно объектно-ориентирован, вы не сможете иметь более одного возврата. Более того, у вас не будет ничего, кроме возврата в каждом методе. На самом деле у вас будет всего два оператора во всем программном обеспечении - new и return. Вот и все. По крайней мере давайте пытаться выглядеть как чистый ООП.


Комментариев нет:

Отправить комментарий