2014-04-30 35 views
0

我的代碼中有下面的開關案例。優化開關案例代碼

switch(condition) 
     case 'A' : 
     //Code part A 
     break; 
     case 'B' : 
     //Code part A 
     //Code part B 
     break; 
     case 'C' : //Some code 
     break; 

代碼在'A'和'B'的情況下都重複A部分。我想避免重複的代碼。

如果我們使用fall,那麼我們需要爲case B添加if條件。這是避免重複代碼的唯一方法嗎?

+2

使用函數? –

回答

4

如果順序並不重要,你可以簡單地做:

switch (condition) 
{ 
    case 'B': 
     // Code part B 
     // no break 
    case 'A': 
     // Code part A 
     break; 
    ... 
} 

一個case 'B'將繼續通過case 'A'代碼得到執行,因爲你沒有叫break

+0

這個作品,如果部分A和B的順序不重要 –

3

不幸的是,這是定義partA函數的唯一方法。

switch (someValue) { 
    case 'A': 
    case 'B': 
     // Code part A 
     if (someValue == 'A') break; 
     // Code part B 
     break; 
    case 'C': 
     break; 
} 

這可以讓你的A部分和B部分的代碼有嵌套的同級別:

您可以通過退出從組合case標籤內switch使代碼顯得稍微均勻減少嵌套。

+0

醜,但可以是最不醜的替代品:) –

0

「//代碼部分A」之前是否可以執行「//代碼部分B」?如果是這樣,你可以重新排列它們,讓它在沒有條件的情況下通過。

我不認爲有很多事情要做,否則。創建面嚮對象語言的原因之一是避免了命令式語言中的代碼重複。

4

操作開關語句以減少代碼重複可能會起作用,但之後可能會向交換機添加其他情況,這可能會破壞該優化的清潔度。例如:

switch(condition) 

     case 'A' : 
     // Code part A 
     break; 

     case 'B' : 
     // Code part A 
     // Code part B 
     break; 

     case 'C' : 
     // Code part C 
     break; 

     case 'D' : 
     // Code part A 
     // Code part D 
     break; 

突然間,當時看起來不錯的優化開始變得難以維護,難以閱讀和容易出錯。

已經確定存在通用代碼,我認爲最清晰的響應是編寫函數來執行每個案例的通用代碼和調用。展望未來,這將繼續保持。