วันนี้มี Nuget Library ตัวนึงมาแนะนำสำหรับชาว .NET
เป็น library ไว้ช่วยจัดการกับ null value ของ object ซึ่งมักจะก่อให้เกิดปัญหา
ทั้งในตอน coding ที่ต้องมานั่งเช็ค null ตลอดเวลา
ไปจนถึงตอน Runtime ที่ต้องเจอกับ NullReferenceException หากลืมเช็ค
ซึ่ง functional programming language ส่วนมากจะมีให้ใช้งานไม่ว่าจะ erlang, scala, kotlin และอื่นๆ

เลยเป็นโอกาสดีที่จะแนะ Library ตัวนี้ให้รู้จักกันก่อนที่ C#/VB ในอนาคตจะมีออกมาให้ใช้กัน
ที่สำคัญรองรับทั้ง .NET Framework 3.5+ และ .NET Core 1.0+ อีกด้วย

Optional

ถูกสร้างขึ้นโดยใช้ Monads Pattern ไว้ใช้สำหรับเลี่ยงกับ Null Value ที่จะเกิดขึ้นเมื่อมีการเข้าถึง object
สามารถใช้จัดการกับ Primitive Type, Reference Type และ Collection ต่างๆ
อีกทั้งยังช่วยลดโค้ดที่ซ้ำซ้อน ที่ต้องเช็ค null ทุกครั้งก่อนเรียกใช้งาน
ซึ่ง Optional มี API ต่างๆให้ใช้งานเยอะพอใช้งานเลย
ลองมาดูโค้ดตัวอย่างการใช้งานกันครับ

ก่อนอื่น install package กันก่อน
PM> Install-Package Optional

ลองใช้ Optional กับ primitive data type

โค้ดปกติของ C#

ถ้าใช้ Optional ละ

เห็นได้ว่ายังไม่ค่อยได้ประโยชน์จากการใช้งานเท่าไหร่ ลองมาดูต่อไป

ลองใช้ Optional  กับ Reference Type

โค้ดปกติของ C#

ถ้าใช้ Optional ละ

จะเห็นได้ว่า if condition ที่ต้อง check null ที่ซับซ้อนหายไป

ลองมาดูอีกตัวอย่างที่เป็น C# LINQ

ลองใช้ Option.Linq จะเขียนแบบนี้

ดูแล้วกระชับและไม่จำเป็นต้องใช้ if เช็ค null ก่อนใช้

ใน C# 6.0 มีฟีเจอร์ใหม่ที่เรียกว่า Nullable Propagation โดยวาง ? หลัง object ก่อน . เพื่อเช็ค null แบบ  short circuit ตัวอย่าง

โค้ดดูสั้นลงและลดการใช้ if
แต่ยังคงมีโอกาสการเข้าถึงค่า null ได้ตรงๆ หากลืมเช็ค และจะไปพบ error ที่ runtime เท่านั้น ยกเว้นคุณมี unit test ดี

หวังว่าพอเป็นไอเดียในการเขียนโปรแกรมอีกทางนึง สำหรับคนที่อยากพัฒนาจาก OOP ไปสู่ FP โดยใช้ C#
ในส่วนของ performance test ผู้เขียนเองยังไม่ได้ทดสอบ จะมาอัพเดทให้ในบทหลัง

ยังมีตัวอย่างการใช้งานอีกมากลองไปดูกันได้ที่นี่ Optional Github

page: DevRocks Admin

(Visited 183 times, 1 visits today)

Leave a Reply