C#.NET เปลี่ยนมาใช้ Query syntax เพื่อ Loop กันดีกว่า

บทความนี้อธิบายด้วย code 4 ตัวอย่าง แบบเปลียบเทียบก่อน และหลังเปลี่ยนแปลงนะครับ  ซึ่งผมคิดว่าพอดูตัวอย่างจนหมดแล้ว ก็พอที่จะทำให้คุณนำไป refactoring code เก่าของคุณเองได้เลย

ตัวอย่าง 1

Normal syntax

List<int> numberList = new List<int>();

for (int i = 1; i <= 1000; i++) { numberList.Add(i * i); }

foreach (var num in numberList) { Console.WriteLine(num); }

Query syntax

List<int> numberList = (from i in Enumerable.Range(1, 1000) select i * i).ToList();

numberList.ForEach(i =>Console.WriteLine(i));

ตัวอย่างที่ 2

Normal syntax

IEnumerable<Tuple<int, int>> ProduceIndices()

{

for (int x = 0; x < 100; x++)

for (int y = 0; y < 100; y++)

yield return Tuple.Create(x, y);

}

Query syntax

IEnumerable<Tuple<int, int>> QueryIndices()

{

return

from x in Enumerable.Range(0, 100)

from y in Enumerable.Range(0, 100)

select Tuple.Create(x, y);

}

ตัวอย่างที่ 3

Normal syntax 

IEnumerable<Tuple<int, int>> ProduceIndices2()

{

for (int x = 0; x < 100; x++)

for (int y = 0; y < 100; y++)

if (x + y < 100) yield return Tuple.Create(x, y);

}

Query syntax

IEnumerable<Tuple<int, int>> QueryIndices2()

{

return

from x in Enumerable.Range(0, 100)

from y in Enumerable.Range(0, 100)

where x + y < 100 select Tuple.Create(x, y);

}

ตัวอย่างที่ 4

Normal syntax

IEnumerable<Tuple<int, int>> ProduceIndices3()

{

var storage = newList<Tuple<int, int>>();

for (int x = 0; x < 100; x++)

for (int y = 0; y < 100; y++)

if (x + y < 100) storage.Add(Tuple.Create(x, y));

storage.Sort((point1, point2) =>

(point2.Item1 * point2.Item1 + point2.Item2 * point2.Item2)

.CompareTo(point1.Item1 * point1.Item1 + point1.Item2 * point1.Item2));

return storage;

}

Query syntax

IEnumerable<Tuple<int, int>> QueryIndices3()

{

return

from x in Enumerable.Range(0, 100)

from y in Enumerable.Range(0, 100)

where x + y < 100

orderby (x * x + y * y) descending

select Tuple.Create(x, y);

}

ลองอ่านๆ Code ตัวอย่างข้างต้น ทั้ง 4 ตัวอย่าง แล้วเปลียบเทียบดูครับ

ซึ่งผมเปลียบเทียบแล้วคิดว่าการเขียน logic ด้วย Query syntax นี้เป็นวิธีที่ทำให้ code เราสั้นลง และอ่านง่ายขึ้น

ขอบคุณครับ 🙂

ขอขอบคุณ Code ตัวอย่างทั้งหมดจากหนังสือ 50 Specific Ways to Improve Your C# Item ที่ 8 ครับผม

Advertisements

#net, #c