Я собираюсь не согласиться со всеми вами, молодыми стрелками на этом.
Использование возврата в середине метода, недействительного или иного, является очень плохой практикой по причинам, которые были четко сформулированы, почти сорок лет назад, покойным Эдсгером У. Дейкстре, начиная с известного " Заявление GOTO считается вредным », и продолжает« Структурированное программирование », Дал, Дейкстра и Хоар.
Основное правило состоит в том, что каждая структура управления и каждый модуль должны иметь ровно одну запись и один выход. Явное возвращение в середине модуля нарушает это правило и значительно затрудняет рассуждение о состоянии программы, что, в свою очередь, затрудняет утверждение, правильна ли программа или нет (что является гораздо более сильным свойством чем «работает ли оно или нет»).
«Заявление GOTO считается вредным» и «Структурированное программирование» началось с революции «Структурированное программирование» 1970-х годов.Эти две части являются причинами, которые мы имеем, если-then-else, while-do и другими явными конструкциями управления сегодня, и почему заявления GOTO на языках высокого уровня находятся в списке находящихся под угрозой исчезновения видов. (Мое личное мнение состоит в том, что они должны быть в списке «Потухшие виды».)
Стоит отметить, что модулятор потока сообщений, первая часть военного программного обеспечения, КОГДА КАЖДОЕ прошло приемное тестирование с первой попытки, без отклонений , отказ, или «да, но» словосочетание, было написано на языке, на котором даже не было заявления GOTO.
Следует также отметить, что Nicklaus Wirth изменил семантику оператора RETURN в Oberon-07, последней версии языка программирования Oberon, сделав его завершающим фрагментом объявления типизированной процедуры (то есть функции) , а не исполняемый оператор в теле функции. Его объяснение изменения сказало, что он сделал это именно потому, что предыдущая форма WAS является нарушением принципа единственного выхода структурированного программирования.
О нас: void DoThis() {if (isValid) DoThat(); } – Dscoduc
Представьте себе код? Зачем? Это прямо сейчас! :-D – STW
Это хороший вопрос, я всегда думаю, что это хорошая практика использования возврата; для выхода из метода или функции. Особенно в методе интеллектуального анализа данных LINQ, имеющем несколько результатов IQueryable, и все они зависят друг от друга. Если один из них не имеет результата, оповещения и выхода. –
Cheung