2015-08-20 82 views
2

JavaScript不要在循環中生成函數並顯示循環複雜性。 我無法繞過JSHint的錯誤消息。下面是我使用的循環:JS提示 - 此功能的循環複雜數字&不要在循環中創建函數

var keys = document.querySelectorAll('#calculator span'); 
var operators = ['+', '-', 'x', '÷']; 
var decimalAdded = false; 
for (var i = 0; i < keys.length; i++) { 
keys[i].onclick = function (e) { 
    var input = document.querySelector('.screen'); 
    var inputVal = input.innerHTML; 
    var btnVal = this.innerHTML; 
    if (btnVal === 'C') { 
     input.innerHTML = ''; 
     decimalAdded = false; 
    } else if (btnVal === '=') { 
     var equation = inputVal; 
     var lastChar = equation[equation.length - 1]; 
     equation = equation.replace(/x/g, '*').replace(/÷/g, '/'); 
     if (operators.indexOf(lastChar) > -1 || lastChar === '.'){ 
      equation = equation.replace(/.$/, ''); 
     }     
     if (equation){ 
      input.innerHTML = (new Function('return ' + equation))(); 
     }     
     decimalAdded = false; 
    } else if (operators.indexOf(btnVal) > -1) { 
     var lastChar = inputVal[inputVal.length - 1]; 
     if (inputVal !== '' && operators.indexOf(lastChar) === -1){ 
      input.innerHTML += btnVal; 
     }     
     else if (inputVal === '' && btnVal === '-'){ 
      input.innerHTML += btnVal; 
     }     
     if (operators.indexOf(lastChar) > -1 && inputVal.length > 1) { 
      input.innerHTML = inputVal.replace(/.$/, btnVal); 
     } 
     decimalAdded = false; 
    } else if (btnVal === '.') { 
     if (!decimalAdded) { 
      input.innerHTML += btnVal; 
      decimalAdded = true; 
     } 
    } else { 
     input.innerHTML += btnVal; 
    } 
    e.preventDefault(); 
}; 

}

如何降低圈複雜度號這個功能是12

+2

可能重複的[我怎麼能減少圈複雜度?](http://stackoverflow.com/questions/17927835/how-could-i-reduce-the-cyclomatic-complexity) –

+0

通過寫東西來減少圈複雜度這不是很複雜。循環複雜性表明概念上的混亂。它也可以被稱爲「意大利麪條索引」。想想這個問題,以及它如何分解,並且可以由碎片組成。然後寫每一塊。然後合併這些碎片。 –

回答

1

好了,圈複雜度基本上是可能的路徑的數量的度量通過一個函數。所以它將所有的循環和條件放大。你有一個for()循環,其中嵌入if()else塊的整個堆棧,所以是的,這將給出非常大的複雜度得分。

減少它的方法是將該代碼拆分爲多個函數。每個職能都應該完成部分工作,因此複雜性得分較低。由於複雜性與每個條件相乘,因此將它們分開將導致幾個函數總體複雜度低得多。

究竟如何分解功能取決於你,但一般的建議是儘可能地分解它們;理想的功能就是隻做一件事的功能,除此之外別無其他。