2013-10-20 141 views
0

原始的Java代碼:重構後如何使用重構工具安全地重構代碼?

public int test() { 
    int total = 100; 
    if (new Random().nextInt(2) < 1) { 
     total += 1; 
    } else { 
     total -= 2; 
    } 
    return total; 
} 

期望代碼:

public int test() { 
    return 100 + randomChange(); 
} 

private int randomChange() { 
    return new Random().nextInt(2) < 1 ? 1 : -2; 
} 

我可以手動修改代碼,但我想在IDE的重構工具回覆(例如IDEA或者Eclipse)。不幸的是,我找不到辦法。

是否有可能通過工具重構所有代碼並且不需要手動將其分解?

+1

我不會考慮將7行方法拆分爲兩個方法,並將'if'更改爲三元表達式 - 作爲重構... – alfasin

+1

爲什麼你期望有人會提供重構工具來進行此特定更改?沒有什麼魔法「讓代碼按我期望的方式工具」,如果有的話,你(和我們大多數人)將失去工作。 –

+0

@alfasin,認爲這是一個簡化的示例 – Freewind

回答

3

突出這一點:

if (new Random().nextInt(2) < 1) { 
    total += 1; 
} else { 
    total -= 2; 
} 

提取方法:並使用提取方法ALT + SHIFT + 中號 Eclipse和CTRL + ALT + 中號Intellij iirc的,但仔細檢查!)。仍然需要進行一些手動重構,因爲默認情況下需要將「total」作爲參數傳遞並返回更改後的值。

的if/else - >三元:的方式來改變if/else語句三元運營商,但他們不是由IDE,而是由第三方插件,例如用於Eclipse的這應該是help提供。

Local var - > return語句:至於「總」變量我不知道任何插件會這樣做,Eclipse/Intellij沒有這樣的選項(至少我不是意識到一個)。他們可以用抽取局部變量來反過來。

@Downvoter:這是使用當前重構工具可以得到的最接近的。正如在評論部分提到的那樣,沒有神奇的「讀我的思想」按鈕。

+0

首先,謝謝,我不是downvoter :)我可以得到這個結果,但我想,如果我可以做更多與他們。 – Freewind

+1

@Freewind:你可以檢查我更新的消息。你可以應付if/else使用插件。對於「帶返回的替代變量」,恐怕不支持。雖然可能有一些插件。 –

+0

這是一個有用的建議! – Freewind

3

這裏的重構,關於日食的一種方式,它不會真的給你想要的確切代碼:

  1. 選擇if-else塊。

  2. 單擊鼠標右鍵,並轉到 「重構」

  3. 進入選項 - 「提取方法」

  4. 給一個方法的名稱 - 「randomChange」。您會看到它將total作爲參數傳遞給該方法。

  5. 點擊「確定」。

你的代碼將被rafactored這樣:

public int test() { 
    int total = 100; 
    total = randomChange(total); 
    return total; 
} 

private int randomChange(int total) { 
    if (new Random().nextInt(2) < 1) { 
     total += 1; 
    } else { 
     total -= 2; 
    } 
    return total; 
} 

不過,我不認爲有一種方法來if-else塊重構爲條件。

+1

@Downvoter關注意見。 –

+0

我不明白這是誰downvoting這個東西...這是關閉你可以得到重構工具... –

+0

@RohitJain,謝謝你,我已經重構了代碼完全一樣的結果在你的答案。但我希望我可以從'randomChange'方法中刪除'total'參數。可能嗎? – Freewind