728x90
쿼리 구문의 장점
- 프로그램의 논리를 명령형 방식에서 선언적인 방식으로 전환할 수 있다.
- 질의의 내용을 구성할 수 있다.
- 개별 항목에 대해 수행하려는 작업의 수행 시기를 연기할 수 있다.
- 사용자의 의도를 더 명확하게 드러낼 수 있다.
- 다양하게 조합할 수 있다.
루프, 쿼리, 확장 메서드 비교
루프
var foo = new int[100];
for (var num = 0; num < foo.Length; num++)
{
foo[num] = num * num;
}
foreach (int i in foo)
{
Console.WriteLine(i.ToString());
}
쿼리
var foo = (from n in Enumerable.Range(0, 100)
select n * n).ToArray();
- 개별 항목에 대해 수행해야 하는 작업을 작은 코드 블록으로 생성한다.
- 쿼리 구문의 지연 수행 모델 덕분에 개별 항목에 대해 수행해야 하는 여러 작업을 하나로 조합할 수 있다.
이러한 기능을 이용하면 여러 작업을 조합해서 한 번에 수행할 수 있다.
확장 메서드
foo.ForAll((n) => Console.WriteLine(n.ToString()));
public static class Extensions
{
public static void ForAll<T>(this IEnumerable<T> sequence, Action<T> action)
{
foreach (T item in sequence)
{
action(item);
}
}
}
쿼리와 확장 메서드 중 어떤 것이 더 가독성이 좋은가?
스타일의 문제다.
위 경우 쿼리가 명확해 보이지만, 경우에 따라 달라질 수 있다.
반응형
'개발공부 > C#' 카테고리의 다른 글
[Effective C#] 아이템 32 : Action, Predicate, Function과 순회 방식을 분리하라 (0) | 2021.12.08 |
---|---|
[Effective C#] 아이템 31 : 시퀀스에 사용할 수 있는 조합 가능한 API를 작성해라 (0) | 2021.12.07 |
[Effective C#] 아이템 29 : 시퀀스를 반환해야 하는 경우 컬렉션을 반환하기보다 이터레이터를 반환하는 것이 낫다. (0) | 2021.12.05 |
[Effective C#] 아이템 28 : 확장 메서드를 이용하여 구체화된 제네릭 타입을 개선하라 (0) | 2021.12.04 |
[Effective C#] 아이템 27 : 인터페이스는 간략히 정의하고 기능의 확장은 확장 메서드를 사용하라 (0) | 2021.12.03 |