문제

LINQ와 LAMBDA 표현이 고급 복잡성을 줄입니까? Coderush는 실제로 VS 분석기가 증가 할 때 CC의 감소를 실제로 보여주기 때문에 궁금합니다.

도움이 되었습니까?

해결책

불일치가 연기 된 실행 때문일 수 있다고 생각합니다. Lambda Expressions와 함께 LINQ를 사용하면 실행될 코드를 지정합니다. 만약에 그런 다음 컬렉션을 반복합니다.

개인적으로 나는 순환 복잡성에 대해 그렇게 걱정하지 않지만 (적절하게 사용했을 때) LINQ가 가독성을 향상 시킨다고 확신합니다. 그게 나야 진짜 에 대한 관심 :)

다른 팁

나는 방금 같은 질문을했고 실제로 Lambda는 순환 복잡성을 증가시킬 수 있습니다. 나는 시험을했고 () 조항이 현명하게 증가 할 수있는 곳.

가독성은 실제로 당신의 최우선 과제 중 하나입니다.

그러나 일부 LINQ 쿼리를 get () 메소드로 대체하는 데 오랜 시간이 걸리지 않았으며 동일한 데이터와 추가 이점을 제공했습니다.


내 빌드/게시 스크립트에 fxcop을 유지하므로 사이클로 더 복잡성을 위해 25의 대상에 도달하지 않고는 무언가를 배포하지 않습니다.

힘들지만 노력의 가치가 있다고 생각합니다.

이것은 내 동료들이 매우 나쁜 코드를 가지고있을 때 토론에서 몇 가지 요점을 부여합니다.이것은 효과가 있습니다. 그것이 중요합니다.


내 팁은 : 사이클러성 복잡성을 25 미만으로 유지하십시오.이를 통해 모든 방법을 잘 유지 관리 할 수있을만큼 간단하게 유지하는 데 도움이 될 수 있습니다.

Jon Skeet은 그 질문에 간결하게 대답했습니다. C#과 같은 높은 수준의 언어에 대한 경험에서 Linq와 같은 구문 설탕 패키지가 개발에 추가되는 값 때문에 사이클 성 복잡성을 측정하는 가치가 감소한다고 덧붙입니다.

지난 10 년 동안 언어가 발전함에 따라, 그물의 많은 사람들은 사이클로 더 복잡성과 코드 라인 사이의 강한 상관 관계를 설명하여 많은 사람들이 그러한 측정 값이 실제로 얼마나 많은 가치를 가져 오는지에 대해 의문을 제기했습니다. 그것을 보는 또 다른 방법은 코드 품질의 척도로서 CC의 평가 절하는 실제로 다른 사람의 역전이기 때문에 가독성의 중요성에 대한 주장이라는 것입니다.

예를 들어, 조건부를 Foreach 루프 내부에 넣으면 조건부가 내 코드로 평가되고 적절한 수의 코드 경로가 계산됩니다. 반면에 함수 트리를 컬렉션에 적용하면 반복하고 있습니다 (예 : 어디서 (evalst => evalst == ar 여전히 같은 수의 분기는 루프의 일부는 아니지만 CC는 Foreach 루프보다 CC가 실제 지점 수 위에 익명 방법 (Lambdas 및 대표)을 사용하기위한 "처벌"을 통해 증가합니다. 여기서 함수를 사용하면 반복 된 컬렉션을 전제로 만들어 루프가 필요한 경우에만 반복됩니다.

그러나 코드는 멀리 읽을 수 있습니다.

마지막으로, LINQ IQueryable 함수 내에서 사용되는 부울 표현식이 단위 테스트를 할 필요가 없다고 결정하면 표면적으로 예외가 있으면 더 높은 차 (일명 비즈니스 수준) 예외 (잘못된 값 테스트, 테스트중인 잘못된 가치가 있기 때문입니다. 언어의 이상적 사용이 적은 사용과 달리 잘못된 연산자, 잘못된 피연산자 등) ) 함수는 내 CC를 증가 시켜서는 안됩니다. 사이클러성 복잡성을 측정하는 것은 더 나은 코드를 만드는 데 도움이되지 않습니다. 무엇이든, 그것은 단순화가 필요하거나 원하는 곳에 단순화하려는 개발자의 경향을 인위적으로 증가시킬 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top