2015-09-21 26 views
1

我正在學習Java以及學習代碼設計的書籍。Java:封裝方法中的if-return語句調用更清晰,更簡潔的代碼?

我想知道,是否有可能在Java中有一個if語句封裝在一個方法調用,允許某人以某種方式退出父方法,如果boolean爲假?

什麼我不知道的是,如果,如果我能在下面的代碼

public void addStock (String stock) { 

boolean stockNameIsValid = testStringForValidStockName(stock); 
    if (stockNameIsValid == false){ 
     JOptionPane.showMessageDialog(getParent(), "Invalid text entered. Stock ticker names may only include upper-case alphabetical letters.", "Invalid Text Entry Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 

boolean stockAlreadyExistsInPanel = testForStockExistenceInListingPanel(stock); 
    if(stockAlreadyExistsInPanel == true){ 
     JOptionPane.showMessageDialog(getParent(), "The same stock cannot be entered twice into the list of stocks being watched.", "Redundant Stock Error", JOptionPane.ERROR_MESSAGE); 
     return; 
    } 

    controller.addStockToDb(stock); 

} 

進一步蒸成類似

public void addStock(String stock){ 
    giveErrorAndReturnIfStockNameInvalid(stock); 
    giveErrorAndReturnIfStockCannotBeFound(stock); 
    controller.addStockToDb(stock); 
} 

我想知道如果這樣做,可能是因爲我的IDE可以將代碼進一步提取出來,然後讓代碼以上面的第二種方式形成,我認爲它會更好地交流意圖,並且比最初的例子具有更高的抽象層次。

我有這個想法,因爲我目前正在讀鮑勃叔叔的「清潔代碼」一書,裏面說,方法最終應該儘可能短,你可以讓他們。如果我在方法調用中封裝低級邏輯,那麼它會讓代碼反映更高級的邏輯。這使得代碼更易於理解,因爲它需要較少的開發人員的精神資源來獲取代碼的每個部分的一般概念。

這裏我的目標是消除讀者實際上不必分析代碼的實現細節,除非它是絕對必要的。因此,讀者不必閱讀整個方法來理解它,而是可以更加抽象地表示我的代碼的邏輯。

+0

你可以拋出一個異常 – Stultuske

+4

**不要在一個'boolean'比較'真'或'** FALSE'。 'if(x == true)'應該**總是**寫爲'if(x)'。明確比較不僅醜陋,而且還會出現錯誤 - 「if(x = true)'也會編譯(如果能告訴我它是什麼,則爲5分)。 –

+0

@BoristheSpider另一方面,也應該不鼓勵使用'if(!x)'。因爲它不太可讀,有時你的思想錯過了複雜應用程序中這一行的*點*。如我錯了請糾正我。 –

回答

0

我們必須使用例外,下面僞代碼解釋一樣:

public void addStock(String stock){ 
    try { 
     isStockNameValid(stock); 
     isStockExists(stock); 
     controller.addStockToDb(stock); 
    } catch(IllegalArgumentException exe) { 

    } 
} 

public boolean isStockNameValid(stock) throws IllegalArgumentException { 
     //check stock name is valid, if not 
     throw new IllegalArgumentException("Stock Name already exists"); 
} 

public boolean isStockExists(stock) throws IllegalArgumentException { 
     //check stock exists, if not 
     throw new IllegalArgumentException("Stock Name already exists"); 
} 
0

如果參數addStock方法是非法的,該方法可以拋出一個非法參數異常,例如:

public void giveErrorAndReturnIfStockNameInvalid(String stock) 
{ 
    // TODO: Check stock name 
    if(stock...) 
    { 
     throw new IllegalArgumentException("Stock has no valid name:"+stock); 
    } 
} 

另行通知(拋出:IllegalArgumentException)是一個unchecked異常,所以你可以得到運行時異常未捕獲的,如果不在調用方法中處理,另一個選項可能是創建一個新的特定於域的異常(如「InvalidStockException」)並進行檢查,因此使用此方法的任何人都將被強制添加一個try-catch塊,以防出現問題並顯示錯誤信息。