2014-01-14 30 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它更加高效。

相关问题