Я согласен с Андерсом: переверни условие и вернись рано. «Единственная точка возврата» была полезна, когда вам нужно было явно выполнить кучу очистки ресурсов в этой точке возврата; с finally
блоками, using
операторами и сборкой мусора, это даже не полезное руководство, IMO. Каждый раз, когда вы обнаруживаете, что делаете что-то просто , чтобы получить одну точку возврата, подумайте, действительно ли это делает код более читабельным.
Я почти всегда нахожу, что если в какой-то момент в коде я знаю возвращаемое значение и нет других действий, которые я хочу предпринять в методе, лучше всего немедленно вернуться. Заставлять читателей просматривать оставшуюся часть метода на всякий случай , есть другое действие, которое не является ни элегантным, ни полезным, ИМО.
Я думаю, это хорошо, что метод не может указать, что он должен заставить вызывающего вернуться - эта способность звучит как кошмар читабельности. Сказав это, я рассмотрел новый тип условного оператора возврата:
return? expression;
Это вернет оцененное значение expression
, если оно не равно нулю; Вы можете использовать его для типов, не допускающих значения NULL, например:
int Foo()
{
return? Bar(); // Where Bar() has a return type of int?
...
}
По сути, это будет оператор возврата, эквивалентный оператору слияния нуля.
В вашем случае это не поможет, учтите - вы хотите вернуть ноль раньше ...