Эти дебаты очень старые, но у меня есть, что сказать. Вопрос заключается в том, может ли метод иметь несколько операторов 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. Вот и все. По крайней мере давайте пытаться выглядеть как чистый ООП.
Это чистый и чистый объектно-ориентированный подход.
Однако Java не имеет этого. Java (и многие другие псевдо-ООП-языки) дает нам такие операторы, как if, else, switch, for, while и т.д., Вместо того, чтобы давать встроенные классы, что бы делать то же самое. Из-за этого мы продолжаем думать в терминах процедур и продолжаем говорить о том, что два оператора return лучше одного.
Если ваш код действительно объектно-ориентирован, вы не сможете иметь более одного возврата. Более того, у вас не будет ничего, кроме возврата в каждом методе. На самом деле у вас будет всего два оператора во всем программном обеспечении - new и return. Вот и все. По крайней мере давайте пытаться выглядеть как чистый ООП.
Комментариев нет:
Отправить комментарий