C# นั้นมีมาตั้งแต่ปี 2002 ซึ่งในอีกไม่กี่เดือนข้างหน้านี้ก็จะครบรอบ 20 ปีของเจ้า C# แล้ว 🎉
ใกล้วันเกิดทั้งที เขาเลยมี Feature ใหม่กำลังจะเข้ามาเป็นทางการในอีกไม่ช้านี้ตัว Feature ที่มาใหม่นั้น วันนี้ผมมี Top 5 Features ใหม่ที่จะมาใน C# 10 ✨
ซึ่งจะมีอะไร Update มาใหม่บ้างนั้น ไปดูกันเลย !!!
เขียนโดย Natakorn Hongharn -BorntoDev Co., Ltd.
1. Null Parameter Checking
Null Reference Exception เป็นอีกหนึ่งอย่าง ที่เราจะเจอกันบ่อยมากใน Bug ของโปรแกรมของเรา (มันช่างน่าเจ็บปวดเหลือเกินนน 😭) การที่เราจะหลีกเลี่ยงเจ้า Exception นี้ เราต้องพยายามไล่ใส่เงื่อนไขเช็คทีละจุดให้ครบเรียบร้อย
ซึ่งเจ้า Feature ใหม่นั้น สามารถช่วยเราในจุดนี้ได้ด้วยนะ ทำให้โค้ดเราดูอ่านง่ายและไหลลื่นยิ่งขึ้น
Pain ปัจจุบันที่เราเจอกันประจำ ก็คือ การเช็คตัว Parameter ที่รับเข้ามาใน Function เพื่อหลีกเลี่ยง NULL นั่นเอง ปกติเราจะแก้ปัญหากันแบบนี้
public SomeFunction(int id, SomeClass newObject) { if (newObject == null) { throw new ArgumentNullException("newObject"); } ... }
ซึ่งเราต้องคอยมานั่งจับ Throw ออกเรื่อย ๆ ถ้าตัว Parameter เป็น NULL แต่ใน Feature ใหม่นั้น เราไม่จำเป็นต้องใส่ Throw อีกต่อไป เพราะมันจะ Throw ให้อัตโนมัติถ้าหากเป็น NULL ต้องขอบอกว่า ดีสุด ๆ ไปเลย
public SomeFunction(int id, SomeClass newObject) { ... }
2. Required Properties
ในทุกวันนี้ ทุกคนส่วนมากเลือกที่จะลดการเขียนแบบ Heavy Constructors หรือบางครั้งอาจจะมีการเขียนแบบ Lightweight Constructors ซึ่งใน Update ใหม่เราสามารถ Define ค่า Properties ได้โดยตรงเลย
var newArticle = new Article { Title = "Top 10 Feature in C# 10", Category = "BorntoDev", ReleaseDate = DateTime.Now() }
ซึ่งปัญหาหลักเลยก็คือ บางสิ่งที่เราควรจะใส่ค่าตลอดเวลาสร้าง Object ใหม่ แต่เราดันไม่ใส่นี่สิ ยกตัวอย่างเช่นดังโค้ดด้านบน หากเราจะสร้างบทความหนึ่งขึ้นมา ก็ต้องใส่ชื่อบทความลงไปด้วยสิ
(สร้างบทความโดยที่ไม่มีชื่อบทความ แล้วนายกำลังเขียนอะไรอยู่ห๊ะ 😂)
ด้วยตัว Feature ใหม่ จะเพิ่มตัว Keyword เข้ามาใหม่คือคำว่า “required” เมื่อเราสร้าง Class ขึ้นมา เราสามารถใส่ Property Required ลงไปได้ ถ้าหากสร้าง Class Object ใหม่แล้วไม่ใส่ Property Required ขึ้นมาล่ะก็ โค้ดของนายจะแดงขึ้นมาทันที !!
public class Article { public required string Title { get; init; } public string Category { get; init; } public DateTime ReleaseDate{ get; init; } }
3. Field Keyword
ตัว Feature ใหม่ที่จะมาอีกตัวหนึ่งก็คือ Init Accessors ทำให้ตัว Object ที่เป็นประเภทคงที่นั้นยืดหยุ่นมากขึ้น เนื่องจาก C# 10 เราไม่จำเป็นต้องมา Implement ตัว Backing Field โดยใช้แค่เพียงตัว Keyword ที่เข้ามาใหม่คือ “field” ตัวอย่างดังนี้
public class Article { private string _title; public string Title { get { return _title; } set { if (value.Trim() == "") throw new ArgumentException("Title can't be empty"); _title = value; } } }
เปลี่ยนเป็น
public class Article { public string Title { get; set { if (value.Trim() == "") throw new ArgumentException("Title can't be empty"); field = value; } } }
4. Global Usings
นี่ก็เป็นอีก 1 Feature ใหม่ที่จะทำให้เราเขียนโค้ดง่ายขึ้น อย่างที่ทุกคนรู้ว่าทุกครั้งในไฟล์ C# จะต้องมี using อยู่ด้านบนอยู่มากมาย ทำให้ส่วนบนดูรกมากและ หากมีการใช้งาน ก็ต้องคอยนำไปใส่ในทุก ๆ ไฟล์อีกด้วย
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.HttpsPolicy; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.UI; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks;
ซึ่งเจ้า Feature นี้จะช่วยแก้ปัญหาในจุดนี้โดยการที่เราใช้คำว่า “global” นำหน้า using ทำให้เราเพียงแค่ประกาศ using เหล่านี้ใส่สักไฟล์ใน Project ก็จะถือว่าทุกไฟล์มี using เหล่านี้หมดเลย ทำให้ไฟล์อื่น ๆ ไม่จำเป็นต้องประกาศ using เลยก็ว่าได้ (เจ๋งสุด ๆ)
global using Microsoft.AspNetCore.Builder; global using Microsoft.AspNetCore.Hosting; global using Microsoft.AspNetCore.HttpsPolicy; global using Microsoft.AspNetCore.Identity; global using Microsoft.AspNetCore.Identity.UI; global using Microsoft.EntityFrameworkCore; global using Microsoft.Extensions.Configuration; global using Microsoft.Extensions.DependencyInjection; global using Microsoft.Extensions.Hosting; global using System; global using System.Collections.Generic; global using System.Linq; global using System.Threading.Tasks;
5. File Namespaces
ตัวนี้ก็ดีไม่แพ้กันเลย โดยปกติแล้วตัว File Namespaces นั้นเราต้องระบุแล้วใส่ปีกกาครอบในส่วนของ File Namespaces ด้วย
namespace Blog { public class Article { ... } }
แต่ใน Update ใหม่ทำให้เราไม่จำเป็นต้องใส่ปีกกาครอบอีกต่อไป เราสามารถกำหนด Namespace ใน Flie Level แบบนี้ได้ทันที
namespace Blog; public class Article { ... }
และนี่ก็คือ Top 5 Features ใหม่ของ C# 10 ที่กำลังจามาในเร็ว ๆ นี้ หวังว่าข้อมูลนี้จะเป็นประโยชน์สำหรับผู้อ่านทุกคนนะครับผม 😁