减少循环复杂性

Ci-*_*son 5 java cyclomatic-complexity

我有一个代码块,我有一个问题,减少了圈复杂度.由于必须匹配的多个条件,我不确定进一步分解它的最佳方法.使问题复杂化的是,在2个案例中创建了一个新对象,但在第三个案例中却没有(它调用另一个方法).这是伪代码:

    if (!cond3 && !cond1 && cond2 && cond4) {
        // actions to perform
        calculateValues();
        return result;
    } else if (!cond1 && cond2 && cond3) {
        // actions to perform
        Object result = new Result();
        return result;
    } else if (!cond4 && cond3 && cond1 && cond5) {
        // actions to perform
        Object result = new Result();
        return result;
    } else {
        // throw error because inputs are invalid
    }
Run Code Online (Sandbox Code Playgroud)

Raf*_*les 6

您应该重构该代码,使用方法来抽象这些条件,高圈数表明代码需要重构.例如,假设:!cond4 && cond3 && cond1 && cond5测试记录的用户是否有汽车,那么您应该将这些条件组合重构为方法:

private boolean loggedUserHasCar() {
    return !cond4 && cond3 && cond1 && cond5;
}
Run Code Online (Sandbox Code Playgroud)

对其他条件做同样的事情.if有4个条件的陈述很难读.提取这些语句将减少您的方法圈复杂度并使您的代码更具可读性