2014-01-14 64 views
0

我想知道這是否會降低到個人品味,或者是否有一個普遍認同的答案。我有一段可以用兩種方式編寫的代碼,雖然我認爲這在效率方面只是一個微不足道的例子,但我想知道未來推斷的普遍接受的答案是什麼。哪種風格的代碼更好:是高效還是分離問題?

下面是我目前擁有的代碼,本質上是通過了一個分數,並且相應地更新了一些文本。文本的顏色也會被分數值改變。

function getBSTotalText(score) { 
     var scoreText; 

     if (score >= 0 && score <= 12) { 
      scoreText = "0 - 12 HIGH RISK"; 
     } 
     else if (score >= 13 && score <= 14) { 
      scoreText = "13 - 14 MODERATE RISK"; 
     } 
     else if (score >= 15 && score <= 16) { 
      scoreText = "15 - 16 LOW RISK"; 
     } 
     else if (score >= 16) { 
      scoreText = "16+ NO RISK"; 
     } 
     else { 
      scoreText = ""; 
     } 

     return scoreText; 
    } 

    function getBSTotalColour(score) { 
     var colour; 

     if (score >= 0 && score <= 12) { 
      colour = "red"; 
     } 
     else if (score >= 13 && score <= 14) { 
      colour = "amber"; 
     } 
     else if (score >= 15 && score <= 16) { 
      colour = "yellow"; 
     } 
     else if (score >= 16) { 
      colour = "grey"; 
     } 
     else { 
      colour = "white"; 
     } 

     return colour; 
    } 

現在,我可以很容易地重構這個成一個功能,只是把它返回一個數組或對象保存基本複製和粘貼相同的代碼到一個獨特的功能,從我的理解將符合幹,但再破固體。最好的做法是保持這些功能不同或合併成一個功能?

回答

0

在這個例子中,我想說有一個令人信服的理由來重構單個函數,因爲這兩個函數都關心同一件事 - 獲取一些格式化的文本。

function getBSTotalDisplayInfo(score) { 
    var result = {}; 
    if (score >= 0 && score <= 12) { 
     result.colour = "red"; 
     result.scoreText = "0 - 12 HIGH RISK"; 
    } 
    else if (score >= 13 && score <= 14) { 
     result.colour = "amber"; 
     result.scoreText = "13 - 14 MODERATE RISK"; 
    } 
    else if (score >= 15 && score <= 16) { 
     result.colour = "yellow"; 
     result.scoreText = "15 - 16 LOW RISK"; 
    } 
    else if (score >= 16) { 
     result.colour = "grey"; 
     result.scoreText = "16+ NO RISK"; 
    } 
    else { 
     result.colour = "white"; 
     result.scoreText = ""; 
    } 
    return result; 
} 
0

檢查代碼的哪部分重複並將其移入一個額外的函數。根據你的情況,它實際上是很容易的:

function getBSTotal(score) { 
    // returns some kind of enum 
    if (score >= 0 && score <= 12) 
     return 0; 
    else if (score >= 13 && score <= 14) 
     return 1; 
    else if (score >= 15 && score <= 16) 
     return 2; 
    else if (score >= 16) 
     return 4; 
    else 
     return 5; 
} 
function getBSTotalText(score) { 
    // now map the enum either to a text 
    return ["0 - 12 HIGH RISK", 
      "13 - 14 MODERATE RISK", 
      "15 - 16 LOW RISK", 
      "16+ NO RISK" 
      ][getBSTotal(score)] || ""; 
} 

function getBSTotalColour(score) { 
    // … or map it to a color 
    return ["red", 
      "amber" 
      "yellow", 
      "grey", 
      "white" 
      ][getBSTotal(score)]; 
} 

您仍然可以通過評估getBSTotal(score)只有一次,即通過向映射函數,而不是score它更加高效。

相關問題