동일한 기능을 수행하기 위해 서로 다른 코드를 사용하여 동일한 방식으로 동작하는 다음 세 가지 기능을 고려하십시오 (예제는 JavaScript로 작성되었으며 JavaScript에 적용된 답변에 특히 관심이 있습니다). 가을 한,논리적으로 비슷한 코드의 순환 적 복잡성
이// Random number from 0-9
var x = Math.floor(Math.random() * 10);
// JSHint reports a cyclomatic complexity of 3
function a() {
if (x === 0) {
return "First";
} else if (x === 1 || x === 2) {
return "Second";
}
return "Third";
}
// JSHint reports a cyclomatic complexity of 4
function b() {
switch (x) {
case 0:
return "First";
case 1:
case 2:
return "Second";
default:
return "Third";
}
}
// JSHint reports a cyclomatic complexity of 1
function c() {
return x === 0 ? "First" : x === 1 || x === 2 ? "Second" : "Third";
}
// All three functions return the same value
console.log(a(), b(), c());
JSComplexity 도구는 ||
사업자가 독립적 인 지점으로 처리됩니다 수단 (4)의 복잡성을,이 모든 세 가지 기능을보고합니다,하지만이 질문은 정말 비슷한 구조를 가진 모든 언어)에 적용 할 수 -case
문. JSHint는 ||
연산자에 대해 신경 쓰지 않는 것처럼 보이지만 동일한 방식으로 오류 메시지 case
을 처리합니다. 조건부 연산자가 완전히 잘못된 것 같습니다.
순환 복잡성을 계산할 때 case
문과 논리적 "or"연산자가 독립 분기로 처리되어야합니까? 삼항 조건문은 어떻습니까 (이 경우는 더 간단하고 JSHint는 분명히 잘못되었다고 생각합니다)? 위의 세 가지 기능 모두 동일한 순환주기 복잡성을 가져야합니까?
참고로, JSHint 지금 4 – JLRishe