2013-08-19 30 views
-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, 
    } 
    

回答

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

應該做同樣的事情,也可以根據實際更具可讀性情況。

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, 
+1

Downvoters,請發表評論。 – GManNickG