Javascript 我的代码很复杂。我怎样才能减少它?
我正在尝试编写一个简单的游戏,名为“Atom”。它工作得很好,但我有一个小问题。VisualStudio表示,下面的第一个代码复杂度为10,第二个代码复杂度为13。如何降低复杂性?提前谢谢大家:)Javascript 我的代码很复杂。我怎样才能减少它?,javascript,html,css,Javascript,Html,Css,我正在尝试编写一个简单的游戏,名为“Atom”。它工作得很好,但我有一个小问题。VisualStudio表示,下面的第一个代码复杂度为10,第二个代码复杂度为13。如何降低复杂性?提前谢谢大家:) checkForWin(){ 让胜利者=真; for(设i=0;i
checkForWin(){
让胜利者=真;
for(设i=0;i
},简化的一种方法是将迭代与条件分离;Visual Studio代码的自动重构将使您能够非常轻松地提取函数,因此您的
checkForWin
函数最终可能看起来像
checkForWin(){
让胜利者=真;
for(设i=0;i
现在它的圈复杂度为4。(提取的函数将有一个8)
您可以采取的另一个步骤是展开其中的一些条件,看看是否可以消除任何额外的代码。在本例中,请注意,if(!this.htmlBoard[j][i].classList.contains(“atom”){
行是无关的,因为它已经由初始的if
语句处理;删除它将使提取的函数降到7
在第二个函数上执行相同的重构方法将产生类似的结果,并且最终应得到较低的总复杂度分数这可能更适合于有更好的方法来制定代码,但我认为没有任何基本方法可以避免您所具有的圈复杂度,至少在没有代码比它需要的更混乱。这回答了你的问题吗?这个问题更适合于堆栈交换,因为它是工作代码,你想知道如何使它更好。请不要担心堆栈溢出。首先感谢你试图帮助我,但我真的不懂代码。也许我应该解释我的g我有一个5x5、6x6和7x7的棋盘,按“播放”键后随机选择。场中隐藏着2-3个原子,玩家必须通过猜测猜出它们的位置。很像“扫雷舰”。方法是checkForWin()应该检查玩家的猜测是否正确。如果我使用你的代码,它不会检查条目是否正确:/i我发布的代码是为了说明这个概念,而不是作为替代品。你不明白什么部分?
checkForWin(){
let winner = true;
for(let i = 0; i < this.fieldSize; i++){
for(let j = 0; j < this.fieldSize; j++){
if(this.htmlBoard[j][i].classList.contains("atom")){
if(this.htmlBoard[j][i].classList.contains("suspectAtom")){
this.setField(j, i, "correct");
}
else{
this.setField(j, i, "wrong");
winner = false
}
}
else if(this.htmlBoard[j][i].classList.contains("suspectAtom")){
if(!this.htmlBoard[j][i].classList.contains("atom")){
this.setField(j, i, "wrong");
winner = false
}
}
}
}
return winner;
},
setBorder() {
for (let y = 0; y < this.fieldSize; y++) {
for (let x = 0; x < this.fieldSize; x++) {
if (
x == y ||
(x === 0 && y === this.fieldSize - 1) ||
(y === 0 && x === this.fieldSize - 1)
) {
continue;
}
if (
y == 0 ||
x == 0 ||
y == this.fieldSize - 1 ||
x == this.fieldSize - 1
) {
this.board[x][y] = "borderField";
this.htmlBoard[x][y].classList.add("borderField");
}
}
}