Introduction
จากการที่ได้ทดลอง และทดสอบโค้ดมาระยะหนึ่งแล้วทำให้เข้าใจความหมายของคำว่า Linq มาพอสมควรก็จะขอสรุปในบทความสุดท้ายประจำเดือนนี้นะครับ LINQ หรือ Language Integrated Query เป็น ฟีเจอร์ใหม่ใน Framework 3.0, 3.5 จากความหมายก็น่าจะเข้าใจพอสมควรนั่นก็คือ เป็นภาษาที่นำเข้ามาขยายประสิทธิภาพการใช้งานคิวรี ซึ่งผมชื่นชอบมากเพราะลดภาระการเขียนโค้ดในส่วนการจัดการการแสดงผลข้อมูลได้ดีพอสมควร แทนที่เราจะเขียนเมธอร์ดเพื่อดึงข้อมูลที่แตกต่างตามความต้องการของแต่ละฟอร์ม เราก็นำมารวมไว้ที่เมธอร์ดเดียว แล้วใช้ลินคิวมาจัดการอีกทีหนึ่งผมว่าประหยัดเวลาไปเยอะทีเดียวครับ ฟีเจอร์อื่นๆ ที่ถูกพัฒนามาร่วมใช้งานกับลินคิวก็มีหลายตัวที่น่าสนใจครับดังจะนำเสนอดังต่อไปนี้
จากการที่ได้ทดลอง และทดสอบโค้ดมาระยะหนึ่งแล้วทำให้เข้าใจความหมายของคำว่า Linq มาพอสมควรก็จะขอสรุปในบทความสุดท้ายประจำเดือนนี้นะครับ LINQ หรือ Language Integrated Query เป็น ฟีเจอร์ใหม่ใน Framework 3.0, 3.5 จากความหมายก็น่าจะเข้าใจพอสมควรนั่นก็คือ เป็นภาษาที่นำเข้ามาขยายประสิทธิภาพการใช้งานคิวรี ซึ่งผมชื่นชอบมากเพราะลดภาระการเขียนโค้ดในส่วนการจัดการการแสดงผลข้อมูลได้ดีพอสมควร แทนที่เราจะเขียนเมธอร์ดเพื่อดึงข้อมูลที่แตกต่างตามความต้องการของแต่ละฟอร์ม เราก็นำมารวมไว้ที่เมธอร์ดเดียว แล้วใช้ลินคิวมาจัดการอีกทีหนึ่งผมว่าประหยัดเวลาไปเยอะทีเดียวครับ ฟีเจอร์อื่นๆ ที่ถูกพัฒนามาร่วมใช้งานกับลินคิวก็มีหลายตัวที่น่าสนใจครับดังจะนำเสนอดังต่อไปนี้
New Feature
1. Automatic Properties
เรามาดูว่ามันมีความแตกต่างจากแบบเดิมอย่างไร ตัวอย่างแรกคือแบบเดิมครับ
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 | public class Company { //Company ID private int _companyId; public int CompanyID { get { return _companyId; } set { _companyId = value; } } //Company Name private string _companyName; public string CompanyName { get { return _companyName; } set { _companyName = value; } } } |
ส่วนต่อมาเป็นแบบที่เรียกกันว่าคุณสมบัติอัตโนมัติดังนี้ครับ
1 2 3 4 5 6 7 8 | public class Company { //Company ID public int CompanyID { get; set; } //Company Name public string CompanyName{ get; set; } } |
คงจะพอเห็นความแตกต่างนะครับ ว่าเราลดรูปการเขียนโค้ดไปได้มากทีเดียว โดยเฉพาะถ้าเกิดในคลาสนี้มี คุณสมบัติเยอะๆ ก็จะประหยัดเวลาไปเยอะเลยทีเดียว
2. Local Variable Type Inference
เป็นฟีเจอร์ในการแปลงตัวแปรในรูปแบบ var ไปเป็นตัวแปรที่ complier รู้จักครับให้อธิบายคงจะงง มาดูตัวอย่างกันเลย
1 2 3 4 5 | num = 50; var str = "string variable" ; var obj = new Company(); var numbers = new int [] {1,2,3,4,5}; var dict = new Dictionary< int ,Company>(); |
นี่คือรูปแบบที่เราสมารถเขียนได้ครับ ใช้คีเวิร์ด var ในการตั้งตัวแปรได้เลย แล้วก็จะแปลงอัตโนมัติให้คอมไพเลอร์เห็นเป็นดังนี้
1 2 3 4 5 | int num = 50; string str = "string variable" ; Company obj = new Company(); int [] numbers = new int [] {1,2,3,4,5}; Dictionary dic = new Dictionary< int ,Company>(); |
3. Object Initializers & Collection Initializers
ก็เป็นฟีเจอร์หนึ่งที่ผมนำมาใช้ แล้วก็ใช้งานได้ดีซะด้วยโดยเฉพาะกับ Data Object ที่ใช้ List ในการดำเนินงาน ความหมายในตัวก็คือรูปแบบการให้ค่าอ๊อบเจ็ค และข้อมูลที่เป็นคอลเลคชั่น มาดูตัวอย่างกันก่อนนะครับ ว่าโค้ดอันก่อนๆ เป็นอย่างไร
1 2 3 | Company com= new Company(); com.CompanyID=1; com.CompanyName= "Test Company" ; |
มาดูรูปแบบใหม่กันมั่งครับ สามารถเขียนโค้ดได้ดังนี้
1 | Company com= new Company{ CompanyID=1, CompanyName= "Test Company" } |
สำหรับคนที่ไม่เคยเขียนการให้ค่า Data Object คงจะมองว่าไม่ต่างกันมากนัก แต่ลองไปทำดูครับ โดยเฉพาะการถ่ายค่าไปยัง ตัวแปรแบบ Generic( List ) แล้วท่านจะเห็นความแตกต่าง อย่าพอใจแค่รู้เท่านั้นนะครับต้องทำและเข้าใจกับมันถึงจะเกิดผล
4. Anonymous Types
เกี่ยวกับเรื่องนี้ก็ได้พูดไปเยอะแล้ว ลองดูเรื่องก่อนหน้านี้ รู้สึกว่าจะเน้นเรื่องนี้เหลือเกิน เนื้อหาอาจจะไม่ชัดเจนนะครับ แต่คิดว่าตัวอย่างที่ทำไว้พอนำไปใช้งานได้ดีในระดับ มาดูโค้ดก็แล้วกันครับ
เกี่ยวกับเรื่องนี้ก็ได้พูดไปเยอะแล้ว ลองดูเรื่องก่อนหน้านี้ รู้สึกว่าจะเน้นเรื่องนี้เหลือเกิน เนื้อหาอาจจะไม่ชัดเจนนะครับ แต่คิดว่าตัวอย่างที่ทำไว้พอนำไปใช้งานได้ดีในระดับ มาดูโค้ดก็แล้วกันครับ
1 | var company = new {ID=1, Name= "Test Company" } |
สรุปก็เป็นเรื่องเกี่ยวกับการสร้าง Structure ขึ้นมาใช้งานเองโดยไม่ยึดติดกับ การต้องมี คลาสและคุณสมบัติของคลาสขึ้นมาก่อน แล้วค่อยสร้าง Instance ขึ้นมาใช้งาน คงพอจะนึกออกนะครับ ว่าปกติเราจะสร้างตัวแปรที่มี Propertie เราจะต้องสร้าง Class มาก่อนแล้วค่อย นำมาใช้งาน
5. Lambda Expressions
ตัวนี้ยังไม่ได้ลองใช้งานจริงๆ แต่จากข้อมูลเขาว่ากันว่าใน c# 2.0 นั้นการจะสร้าง Method ขึ้นมาใช้งานนั้นจะต้องมีการกำหนดรูปแบบของเมธอร์ด และเขียนโค้ดในบล็อคเมธอร์ดที่กำหนดไว้เท่านั้น แต่ในฟีเจอร์ใหม่นี้เราสามารถเขียนขึ้นที่ไหนก็ได้ในการสร้างเมธอร์ดหรือฟังก์ชั่นการทำงาน ลองดูตัวอย่างโค้ดที่ผมนำมาจากที่อื่นนะครับ เพราะผมยังไม่ได้นำมาประยุกต์ใช้งาน ดังนี้
ตัวนี้ยังไม่ได้ลองใช้งานจริงๆ แต่จากข้อมูลเขาว่ากันว่าใน c# 2.0 นั้นการจะสร้าง Method ขึ้นมาใช้งานนั้นจะต้องมีการกำหนดรูปแบบของเมธอร์ด และเขียนโค้ดในบล็อคเมธอร์ดที่กำหนดไว้เท่านั้น แต่ในฟีเจอร์ใหม่นี้เราสามารถเขียนขึ้นที่ไหนก็ได้ในการสร้างเมธอร์ดหรือฟังก์ชั่นการทำงาน ลองดูตัวอย่างโค้ดที่ผมนำมาจากที่อื่นนะครับ เพราะผมยังไม่ได้นำมาประยุกต์ใช้งาน ดังนี้
1 2 3 4 5 6 7 8 | delegate R MyDeleg(A arg); MyDeleg IsPositive = delegate( int num) { return num > 0; }; MyDeleg IsPositive = num => num > 0; |
รายละเอียดการใช้งานถ้าได้เพิ่มเติม จะเขียนอธิบายใหม่ให้แจ่มแจ้งในบทความต่อๆไปนะครับ
6. Extension Methods
เท่าที่ดูๆ มาเป็นการสร้างเมธอร์ด โดยที่ไม่ต้องนำมา รีคอมไพล์ใหม่ ยังไม่ได้ลองเหมือนกับครับ สำหรับวันนี้เอาตัวอย่างไปก่อนแล้วกัน แล้ววันหลังจะหามาเขียนเพิ่มเติมครับ
เท่าที่ดูๆ มาเป็นการสร้างเมธอร์ด โดยที่ไม่ต้องนำมา รีคอมไพล์ใหม่ ยังไม่ได้ลองเหมือนกับครับ สำหรับวันนี้เอาตัวอย่างไปก่อนแล้วกัน แล้ววันหลังจะหามาเขียนเพิ่มเติมครับ
1 2 3 4 5 6 7 8 9 | public static class MyExtensions { public static bool IsValidEmailAddress( this string s) { Regex regex = new Regex( @ "^[w-.]+@([w-]+.)+[w-]{2,4}$" ); return regex.IsMatch(s); } } |
ต่อมา เป็นโค้ดการเรียกใช้งาน Method ที่เขียนขึ้นตามโค้ดด้านบน
1 2 3 4 5 6 7 8 | using MyExtensions; string email = Request.QueryString[ "email" ]; if ( email.IsValidEmailAddress() ) { // ... } |
7. Query Syntax
อันสุดท้ายก็เป็นพระเอกของงานนี้เลยครับ นั่นก็คือ Query Syntax นำมาใช้งานได้ดีทีเดียว เป็นรูปแบบการใช้งานตามโครงสร้างง่ายๆ นั่นก็คือ … from … where … select เรามาดูตัวอย่างการใช้งานคร่าวๆ นะครับบทนี้ขอกล่าวแบบสรุปๆ ตามนี้
1 2 3 4 | var comp = comdb.Select(); var newcomp = (from c in comp where c.CompanyName.Contains(toolStripTextBox1.Text) select c); |
ซึ่งรายละเอียดเกี่ยวกับเรื่องนี้ สามารถดูในบทความก่อนหน้านี้นะครับ ได้เขียนตัวอย่างแบบง่ายๆ ไว้หลายหัวข้อเหมือนกัน
Summary
สรุป บทนี้ขอกล่าวรวมๆ ถึงการใช้งาน LINQ (C#) ในหัวข้อทั้ง 7 ที่เกี่ยวข้อง เพื่อง่ายในการไปเจาะลึกรายละเอียดกันอีกที วันนี้ก็เป็นวันสุดท้ายของเดือนแล้ว ก็ขอให้ทุกคนมีความสุขกับการจัดการเงินเดือนก็แล้วกันเน้อ
สรุป บทนี้ขอกล่าวรวมๆ ถึงการใช้งาน LINQ (C#) ในหัวข้อทั้ง 7 ที่เกี่ยวข้อง เพื่อง่ายในการไปเจาะลึกรายละเอียดกันอีกที วันนี้ก็เป็นวันสุดท้ายของเดือนแล้ว ก็ขอให้ทุกคนมีความสุขกับการจัดการเงินเดือนก็แล้วกันเน้อ
อ้างอิงให้เขาหน่อย
No comments:
Post a Comment