Какое-либо исследование в области пригодности для обслуживания “защитного оператора” по сравнению с “единственной функциональной точкой выхода” доступная парадигма?

Я задаюсь вопросом, было ли какое-либо исследование (и случайно и устойчиво) на пригодности для обслуживания проектов, которые используют "защитную парадигму" оператора по сравнению с "единственной функциональной точкой выхода" парадигма?

Пример оператора Guard (в C#):

string GetSomeString()
{
    if(necessaryConditionFails) { return null; }
    if(!FunctionWithBoolReturn(someAttribute)) { return null; }
    //all necessary conditions have been met
    //do regular processing...
    return finalStringValue;
}

единственный функциональный пример точки выхода (в C#):

string GetSomeString()
{
    string valueToReturn = null;
    if(necessaryConditionPasses && FunctionWithBoolReturn(someAttribute)) 
    { 
        //all necessary conditions have been met
        //do regular processing...
        valueToReturn = finalStringValue;
    }
    return valueToReturn;
}

Я знаю достоинства, и сбои обоих были обсуждены бесконечно на Так, но я ищу фактическое исследование как удобный в сопровождении каждая парадигма is*. Это может быть неизвестно, но я фигурировал, там ли информация, кто-то на ТАК знал бы, где это было. Мои веб-поиски не были успешны до сих пор.

** Я также знаю, что многие программисты (включая меня) используют оба принципа всюду по своему коду, в зависимости от ситуации. Я просто надеюсь обнаружить, который имеет успешный опыт работы большей пригодности для обслуживания для использования в качестве предпочтительной парадигмы.*

10
задан jball 7 July 2011 в 22:15
поделиться

1 ответ

У принудительного использования единой точки выхода есть некоторые проблемы.

Во-первых, это может привести к сложным конструкциям. Представьте функцию, в которой вам нужно открыть файл, прочитать строку, преобразовать строку в число и вернуть это число или ноль, если что-то идет не так. С единственной точкой выхода вы в конечном итоге используете множество вложенных if (если файл существует, откройте его, если открытие завершится успешно, прочтите строку, если чтение успешно преобразует значение в целое число), что делает ваш код не читается. Некоторые из них можно решить, поставив метку в конце функции и используя goto (нам приходилось использовать это в прошлом, поскольку мы также использовали единую точку выхода и предпочтительную читаемость), но это не идеал.

Во-вторых, если вы используете исключения, вы вынуждены перехватывать все, если вам снова нужна единая точка выхода.

Лично я предпочитаю ставить множество проверок (и утверждений) в начале и во время выполнения функции и выходить из функции при первых признаках проблемы.

10
ответ дан 4 December 2019 в 01:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: