如何重构逐步代码?

时间:2013-08-19 22:26:16

标签: java design-patterns

考虑代码示例。

  1. 这是一些我不知道的模式吗?

  2. 如何清理这种混乱?

    int func1val = func1();
    boolean val = checkIfTrue(func1val);
    if (val) {
        int func2val = func2();
        val = checkIfTrue(func2val);
        if (val) {
            int func3val = func3();
            val = checkIfTrue(func3val);
        }
    }
    
    if (val) {
    // print func1val, func2val, func3val, 
    } 
    

2 个答案:

答案 0 :(得分:0)

如何清理它是使用mid-method返回。

int func1val = func1();
boolean val = checkIfTrue(func1val);
if (!val) return;
int func2val = func2();
val = checkIfTrue(func2val);
if (!val) return;
int func3val = func3();
val = checkIfTrue(func3val);
if (!val) return;

// print func1val, func2val, func3val, 

然后你甚至不需要val;只是内联每个事件:

int func1val = func1();
if (!checkIfTrue(func1val)) return;
int func2val = func2();
if (!checkIfTrue(func2val)) return;
int func3val = func3();
if (!checkIfTrue(func3val)) return;

// print func1val, func2val, func3val, 

答案 1 :(得分:0)

当且仅当checkIfTrue对所有三个值都返回true时,看起来你打印出这三个值。除了checkIfTrue的一些实现细节,你不能做像

这样的事情
int func1val = 0, func2val = 0, func3val = 0; // any value here
if (checkIfTrue(func1val = func1()) && checkIfTrue(func2val = func2()) && checkIfTrue(func3val = func3())) {
    // print func1val, func2val, func3val
}

公平地说,像是

int func1val = func1();
if (checkIfTrue(func1val)) {
    int func2val = func2();
    if (checkIfTrue(func2val)) {
        int func3val = func3();
        if (checkIfTrue(func3val)) {
            // print func1val, func2val, func3val
        }
    }
}

应该做同样的事情,根据实际情况可能更具可读性。