我制作了一个涉及很多逻辑的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
答案 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行左右的代码分成多个文件。你会发现这是值得的。