1. 긴 쿼리
- 쿼리의 길이가 길면 코드 가독성이 떨어진다.
static void Example_LongQuery()
{
object[] arr = { 5, 3, 2, 4, 1, "hello" };
var arr2 = arr.OfType<int>().Where(x => x >= 2).OrderBy(x => x).Skip(1).Take(2).Select(x => x.ToString("C")).Reverse().ToArray();
foreach (var item in arr2)
{
Console.WriteLine(item);
}
}
- 1.1 단순 긴 쿼리 예제
2. 긴 쿼리를 자른다
- 긴 쿼리를 여러 개로 자르는게 좋다.
- 짧은 쿼리로 작성하면 계산의 중간 결과를 확인할 수 있습니다.
- 예제와 같이 작성하여 중간 결과를 확인할 수 있습니다.
2.1 긴 쿼리 자르기 예제
static void dump<T>(string label,IEnumerable<T> en)
{
Console.WriteLine(label + ": ");
foreach (var item in en)
{
Console.WriteLine(item);
}
Console.WriteLine();
}
static void Example_ShortQuery()
{
object[] arr = { 5, 3, 2, 4, 1, "hello" };
IEnumerable<int> q1 = arr.OfType<int>();
dump("q1", q1);
var q2 = q1.Where(x => x >= 2);
dump("q2", q2);
var q3 = q2.OrderBy(x => x);
dump("q3", q3);
var q4 = q3.Skip(1);
dump("q4", q4);
var q5 = q4.Take(2);
dump("q5", q5);
var q6 = q5.Select(x => x.ToString("C"));
dump("q6", q6);
var q7 = q6.Reverse();
dump("q7", q7);
var q8 = q7.ToArray();
dump("q8", q8);
foreach (var item in q8)
{
Console.WriteLine(item);
}
}
2.2 실행결과
2.3 Printf 디버그
- 2.1 예제와 같이 코드를 변경하여 중간 결과를 출려가는 디버그 기법은
Printf 디버그
입니다.
- 디버거를 사용할 수 없을 때 사용합니다.
- C#에서는 Console.Write(), Console.WriteLine()을 사용합니다.
- C#에서는 System.Diagnostics.Trace, Debug.Write, Debug.WriteLine을 사용합니다.
- 일반적인 출력과 디버그 정보 출력을 분리하는게 좋습니다.
3. 쿼리 정리
- 긴 쿼리를 중간마다 줄바꿈을 통해 행 수를 늘려서 가독성을 높일 수 있습니다.
- 긴 쿼리 예제에서 값 선택과 그렇지 않은 부분을 나누는 방법을 사용할 수 있습니다.
static void Example_ArrangeQuery()
{
object[] arr = { 5, 3, 2, 4, 1, "hello" };
var q1 = arr.OfType<int>()
.Where(x => x >= 2)
.OrderBy(x => x)
var q2 = q1.Skip(1)
.Take(2);
var arr2 = q2.Select(x => x.ToString("C"))
.Reverse()
.ToArray();
foreach (var item in arr2)
{
Console.WriteLine(item);
}
}