Javascript,意大利面条代码和组织的麻烦

时间:2014-04-30 01:07:17

标签: javascript oop inheritance code-organization

我制作了一个涉及很多逻辑的2人棋牌游戏。这是我第一次编写涉及大量逻辑,继承和代码组织的程序。我发现自己遇到了许多意大利面条代码和功能,这些代码和功能并不局限于做一件我认为是好习惯的事情。我试图想出限制意大利面条代码的想法,但我不确定最好的方法。这是我经常遇到的一个例子。

if (that.selected && that.selected != target) {
  if (that.positions[target] && that.positions[target].color == piece.color) {
      ...
  } else {
    var ind = xyz...;
    if (piece.type == "king" && ind != -1) {
    } else {
    ...
    }
  }

到目前为止,我最好的想法是将条件移动到单独的函数中(例如,代替我发布的代码的第一行,我可以做类似的事情......

var selected_non_target = selectedNonTarget(that.selected, target);
if (selected_non_target) {
  continue above code;
}
function selectedNonTarget(selected, target){
  if (selected && selected != target) {
    ... maybe do some stuff ... 
    return true;
  }
}

但我真的不知道这会有多大帮助,而且代码更多......这就是存储库。我会喜欢任何建议。 https://github.com/natecraft1/javascript_chess/blob/master/index.html

1 个答案:

答案 0 :(得分:1)

我认为你自己的建议是一个好的开始。你可以稍微减少一点 - 不需要第一个var

if (selectedNonTarget(that.selected, target))
{   
    // continue above code; 
} 

function selectedNonTarget(selected, target){
    // return a bool -- resist the urge to do other things here   
    return (selected && selected != target); 
}

这是一个很好的编码实践,可以将复合条件简化为一个有名的函数,然后将其视为一个简单的true |在你的主要逻辑中是假的。这应该有助于减少代码库增长时的认知负荷 - 并且每一点点都有帮助。

当然,我们都明白&&!=应该是什么意思和做什么,但是在编码12小时后的凌晨2点,您if (selectedNonTarget(that.selected, target))的错误就越少

我还强烈建议花一些时间将你拥有的1000行左右的代码分成多个文件。你会发现这是值得的。