Это плохая практика, чтобы иметь несколько возвратов?

У правила Sonar Lint "Методы не должны быть слишком сложными" (squid:MethodCyclomaticComplexity) есть пример использования более одного оператора return в программном блоке. (см. https://groups.google.com/forum/ для ознакомления с правилами вычисления цикломатической сложности).

Возвраты сокращают коды в ветви и приводят к меньшим кодовым блокам. Например,

    int findBranchNumber(String input) {
        if ("branch1".equals(input)) {
            возврат 1;
        }
        if ("branch2".equals(input)) {
            возврат 2;
        }
        // ....
        возврат -1;
    }

Альтернатива будет использовать переменную метода (в этом случае) или более крупные блоки. Кто бы ни читал код, он должен прочитать весь метод, прежде чем он / она поймет, что только первые 3 строки имеют отношение к "branch1".

Пожалуйста, порекомендуйте...

1 ответ

Я лично делаю, как вы показываете в примере. Только будьте осторожны, если вы выделяете ресурсы (например, открытие файла, выделение памяти и т. Д.) И должны быть освобождены по возвращении из функции. В этом случае может быть использован трюк с прокатом Goto Line, описанным в первом ответе /questions/38238956/primeryi-horoshih-gotos-v-c-ili-c/38238982#38238982

Другие вопросы по тегам