-2

考虑一个代码示例。

  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, 
    } 
    
4

2 回答 2

0

如何清洁它是使用中间方法返回。

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, 
于 2013-08-19T22:29:42.773 回答
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
        }
    }
}

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

于 2013-08-19T22:47:38.780 回答