2017-10-19 2 views
4

시나리오$type_id 변수 ID의 특정 세트 중 하나인지 확인해야된 Cyclomatic 복잡성 스위치/케이스 사이의 차이와 in_array

. 그들의 대부분은 일반적인 경우에 아래로 계단식 곳

는 가독성 이외의 이유로, 나는

switch($type_id) { 
    case Type::SOME_TYPE: 
    case Type::SOME_OTHER_TYPE: 
    ... 
     //do stuff 

갔다.

그러나 이것은 PHPMD가 징징 시작할 때까지 순환 적 복잡성을 증가시킵니다.

그래서 나는 대신 in_array()을 사용하려고합니다.

if (in_array($type_id, [ 
    Type::SOME_TYPE, 
    TYPE::SOME_OTHER_TYPE, 
    ... 
    ])) { 
    //do stuff 
} 

PHPMD 불평을 중지하지만, 단지 in_array() 기능 뒤에 숨겨진, 아직 거기에 복잡성을하지 않습니다이 시점에서 질문

?

답변

3

예. 하지만 PHPMD 규칙은 단일 메소드/함수 내부의 CC를위한 것입니다. 전체 콜 그래프에서 CC를 적용하지 않습니다. 일반적으로 PHPMD CC 경고는 자체 메소드로 분기를 추출하여 해결할 수 있습니다.

메모 : replace the conditional with polymorphism으로 간주합니다.

+0

그렇다면 CC가 읽을 수 없기 때문에 "엉망"으로 간주된다는 의미입니까? – Alec

+0

@Alec 아니, 반드시 읽는 것이 어렵다는 것을 의미하지는 않습니다. 그 방법/기능에 대해 이해하거나 추론 할 수있는 것에 대한 더 많은 것. 코드 조각을 통해 가능한 많은 분기가있는 경우이 입력 x에 대해 말하기가 더 어려워지고 출력은 y가됩니다. 이것은 차례로 함수를 다루기 위해 필요한 단위 테스트의 수에 직접적인 영향을 미칩니다. Wikipedia 기사는 매우 철저합니다. https://en.wikipedia.org/wiki/Cyclomatic_complexity – Gordon