2012-09-29 6 views
3

나는 ReSharper에서를 사용하고, 나는이 같은 몇 줄의 코드 할 때 : 나는 '왜 LINQ 표현식을 사용합니까?

return possibleCombinations.Any(possibleCombination => 
    possibleCombination.Count == combo.Count 
    && possibleCombination.Select((l, i) => combo.Contains(l)).All(b => b)); 

:

foreach (var posCombination in possibleCombinations) 
{ 
    if (posCombination .Count == combo.Count && posCombination .Select((l, i) => combo.Contains(l)).All(b => b)) 
    { 
     return true; 
    } 
} 

return false; 

을 내가 LINQ 표현으로 변환 할 경우는 나에게 묻습니다 많은 사람들이 LINQ 문에서 무슨 일이 일어나고 있는지 읽는 데 어려움을 겪고 있다고 말했습니다. 그렇다면 왜 코드를 읽기 쉽게 만드는 경우 LINQ 표현식으로 변환하려고합니까?

+0

이 내용을 읽는 것이 중요합니다. 프로그래밍 첫 날에 루프를 읽을 수 없으므로 이제 할 수 있습니다. – usr

답변

6

전적으로 독자에게 달려 있습니다. 코드를 읽는 독자가 자신을 비롯하여 더 자세한 스타일을 선호한다면 항상 읽기 쉬운 영리한 코드는 프로그래머가 CPU 시간보다 훨씬 비쌉니다. . 결국 ReSharper의 힌트 일뿐입니다.주의를 기울이거나 무시하는 것은 전적으로 귀하의 책임입니다.

LINQ 코드를 읽는 것이 시간이 지나면 더 쉬울 것입니다. 나는 그것이 훨씬 쉬워졌지만 LINQ 코드를 작성하고 다른 팀 구성원이 작성한 LINQ 코드를 살펴 보았습니다. LINQ 표현식은 짧은 코드 줄에 놀라운 양의 정보를 나타낼 수 있으므로 일반 영어로 의도를 철자하면 필자가 작성한 줄에 비틀 거리면 의미를 파악하는 데 도움이됩니다. 몇 개월 전.

+1

예. 그것은 프로그래머에게 완전히 달려 있습니다. 진짜 프로그래머 들어, Linq 좀 foreach 코드보다 더 읽을 수 있어야합니다 .. 그냥이 http://programmers.stackexchange.com/questions/24940/does-the-usage-of-linq-and-lambda-expressions- lead-to-less-readable-code – Sandeep

+0

개발자가 생각하는 것보다 읽기 쉽다. 도와 주셔서 감사합니다! –

0

대신 힌트를 제공하도록 Resharper를 설정할 수 있습니다. 당신은 그것이하는 모든 제안을 따라야 할 필요가 없으며 솔직히 말해서 매우 짜증나게 할 수 있습니다.

return possibleCombinations.Any(possibleCombination => possibleCombination.Count == combo.Count && possibleCombination.Select((l, i) => combo.Contains(l)).All(b => b)); 

는 ReSharper에서의 조언을 안 때와 같은 예이다. 모두가 Linq 전문가가 아니며 일부 인턴과 협력 할 때 이것을 알고 있습니다. 그들은 내 Linq 코드가하는 일을 계속 물어 봤고 심지어 나의 스승도 그것을 좋아하지 않았다. 코드를 간단하고 읽기 쉽도록 유지하는 것이 더 쉽습니다.

Linq를 사용하면 달성하려는 목표에 매우 분명합니다.

How to configure Resharper, 당신이 싫증이 나서.

0

많은 사람들이 LINQ 문에서 계속 진행되는 내용을 읽는 데 어려움을 겪고 있다고 말했습니다. 그렇다면 왜 LINQ 표현식으로 변환하려고합니까? 내 코드가 덜 읽기 쉬운가요?

기존 코드는 개발자가 매우 오랫동안 익숙해 져있어보기가 쉽습니다. LINQ 구문은 비교적 새로운 기능입니다 (DB 쿼리 제외).

처음에는 간단한 LINQ 표현을 이해하는 데 어려움을 겪었지만 연습을 통해 나는 그것을 좋아합니다. 일부 LINQ 표현식이 단순히 모호하다는 사실을 부인할 필요가 없습니다 (예 : Aggregate) 이제는 복잡한 쿼리를 쉽게 작성할 수 있습니다.

왜 LINQ 표현식을 사용해야합니까? 그것은 코드가 (LOC 감소) 단순화하고, 이미 LINQ 식, 코드, 즉이 부분을 사용하고

3

(필터링, 그룹화, 지연로드 정렬과 같은) 강력한 구조를 제공합니다 : 그래서

posCombination.Select((l, i) => combo.Contains(l)).All(b => b) 

을 당신은 당신 자신의 질문에 대답 할 수있을 것입니다. 왜 LINQ 표현식을 사용하기로 결정 했습니까?

나는이 문제가 ReSharper가 LINQ 표현 그 자체보다 더 많이 제기 한 것으로 생각합니다. 다른 사람들이 말했듯이, 그들은 단지 제안 일 뿐이며, 그들과 함께해야 할 일을 결정하는 것은 당신에게 달려 있습니다. 나는이 특별한 제안을 정리할 필요가 있다고 생각한다. 그러면 코드를 더 읽기 쉽게 만들어 줄 것이다. 첫째, lamda 표현식의 매개 변수 이름은 호출 컬렉션에서 무엇인지 추론 할 수 있기 때문에 단축해야합니다. 둘째, 원래 LINQ 표현이로 단순화 할 수있다 :

다음
posCombination.All(x => combo.Contains(x)) 

결과 것 LINQ 표현 :

return possibleCombinations.Any(p => p.Count == combo.Count && 
            p.All(x => combo.Contains(x))); 

지금은 내장을 검사 할 필요가 없습니다 코드의 간결한 아직 설명 라인입니다 루프의 물론 이것은 여전히 ​​단순한 제안입니다. 원하는 경우 더 자세한 매개 변수 이름을 사용할 수 있으며 메서드에 읽기 쉬운 부분을 추출하거나 주석을 추가하거나 원래 코드를 고수 할 수 있습니다.

관련 문제