Object and Collection Initializer
ธันยพร แซ่ลี้ 650710554
What is Object Initializer and Collection Initializer?
หลายคนอาจสงสัยว่า Object and Collection Initializer คืออะไร? บทความนี้เราจะมาไขข้อสงสัยกันค่ะ
Object Initializer in C#
Object Initializer คือวิธีในการกำหนดค่าเริ่มต้นให้กับ fields หรือคุณสมบัติของ class โดยไม่จำเป็นต้องเรียกใช้ constructor มาช่วยในการจัดการ ข้อดีคือ เป็นวิธีการที่ง่ายและสะดวกสบายต่อการใช้งาน
Output
คำอธิบายตัวอย่าง : จากทั้งตัวอย่าง 1.1 , 1.2 และตัวอย่าง 1.3. จะเห็นได้ว่า ทั้ง Class Student Class Geeks และ Class Cat ได้ สร้าง object และกำหนดค่าเริ่มต้นในเวลาเดียวกันโดยใช้เครื่องหมายวงเล็บปีกกาใน main() โดยไม่ใช้ constructor
Collection Initializer in C#
ในทำนองเดียวกันนอกจากเราจะสามารถกำหนดค่าเริ่มต้นให้กับ fields หรือ คุณสมบัติของ class เรายังสามารถกำหนดค่าเริ่มต้นให้กับ collections ได้โดยการใช้ Collection Initializer โดยที่ไม่จำเป็นต้องใช้ method Add() เพื่อเพิ่มองค์ประกอบใน Collection ซึ่ง Collection Initializer สามารถเป็นค่า นิพจน์ หรือตัวเริ่มต้น object ได้ เมื่อมีการเรียกใช้คอมไพเลอร์จะเพิ่มการเรียกโดยอัตโนมัติ
คำอธิบายตัวอย่าง : จากตัวอย่างที่ 2.1 และ 2.2 ตัวเริ่มต้นของ object แต่ละรายการจะอยู่ในวงเล็บปีกกาและคั่นด้วยเครื่องหมายจุลภาคและยังสมารถเพิ่ม null เป็นส่วนประกอบได้ นอกจากนี้ยังสามารถระบุองค์ประกอบที่สร้างดัชนีได้ดังตัวอย่างที่ 2.3 หรือเรียกใช้ Item[TKey] เพื่อตั้งค่า ดังตัวอย่างที่ 2.4
เปรียบเทียบ C# กับภาษาอื่นๆ
ภาษา Java
Java ไม่มี "Object Initializer" ที่เหมือนกับ C# แต่เราสามารถกำหนดค่าให้กับฟิลด์ของ object ได้ เช่น การ ใช้ Setter Methods ซึ่งเป็น Method ที่สร้างไว้เพื่อการกำหนดค่าโดยเฉพาะจะไม่มีการคือค่าใดๆ หรือใช้ Instance Initializer Block เพื่อเริ่มต้นสมาชิกข้อมูล Instance ทุกครั้งที่มีการสร้าง object ของ class
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 3.1 : Setter Methods จะใช้พารามิเตอร์ (newName) ที่ได้รับมาในการกำหนดค่าให้กับตัวแปร name โดย this คือส่วนของ keyword ที่ใช้เพื่ออ้างอิง object ปัจจุบัน และในตัวอย่างที่ 3.2 เราได้สร้าง code block กำหนดค่าเริ่มต้นให้ speed = 100 ( speed จะถูก set ค่า โดยอัตโนมัติ )
นอกจากนี้ Java เองก็ไม่มีไวยากรณ์ของ Collection Initializer แต่สามารถใช้วิธีอื่นเข้ามาช่วยได้ เช่น การใช้ Arrays.asList()
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 3.3 มีการใช้ asList() ของ Java Arrays เพื่อสร้างและพิมพ์รายการที่สอดคล้องกันใน array string ออกมา
ภาษา Python
Python ไม่มี "Object Initializer" ที่เหมือนกับ C#เราสามารถกำหนดค่าโดยไม่ใช้ constructor ได้โดยการปรับแต่ง method เพื่อเริ่มต้น attributes ได้เอง โดยวิธีการนี้สามารถรับพารามิเตอร์ที่ใช้ในการตั้งค่า attributes ได้
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 4.1 เราได้กำหนดให้ set_values() เป็นตัวเริ่มต้น attributes และใช้กำหนดค่าเริ่มต้นให้แก่ attributes ของ object ใน Class car
Python มีการจะกำหนดค่าใน Collection ที่ง่ายและสะดวกจากการกำหนดค่าได้โดยตรง เช่น การใช้ List literal
Output
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 4.2 เราสามารถกำหนดค่า ใน list ภานในวงเล็บเหลี่ยม ([]) โดยคั่นข้อมูลแต่ละตัวด้วยเครื่องหมายจุลภาค (,) และสามารถเปลี่ยนแปลงค่าใน list ได้ตลอด
ภาษา C
เนื่องจาก ภาษา C เป็นภาษาแบบ imperative programming (โปรแกรมเชิงคำสั่ง) จึงไม่สนับสนุน OOP เราจึงจะขอยกตัวอย่างเป็นภาษา c++ แทน
ภาษา C++
ไม่มีสิ่งที่เรียกว่า "Object Initializer" เหมือนกันกับ Java แต่ C++ มีวิธีการหลายแบบในการกำหนดค่าให้กับฟิลด์ของ object เช่นการใช้ aggregate initialization
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 5.1 เป็นตัวอย่างของการใช้ aggregate initialization ในการกำหนดค่าให้กับ struct Person เมื่อมีการสร้าง object
นอกจากนี้ภาษา C++ สามารถกำหนดค่าให้ Collection ได้ โดยใช้ initializer list
Output
คำอธิบายตัวอย่าง : ในตัวอย่างที่ 5.2 มีการใช้ initializer list เพื่อระบุรายการตัวเริ่มต้นให้กับ collection โดยใช้ {}
ตอนที่สร้าง object ซึ่งมีความคล้ายคลึงกับ c#
video
Reference
Object Initializer (C#) : Mahesh Chand. (2023).sharpcorner.com.https://www.c-sharpcorner.com/UploadFile/mahesh/object-initializer-in-C-Sharp/
Example 1.1 : TutorialsTeacher. (2024). tutorialsteacher.com. https://www.tutorialsteacher.com/csharp/csharp-object-initializer.
Example 1.2 : ankita_saini. (2021). geeksforgeeks.org.https://www.geeksforgeeks.org/object-and-collection-initializer-in-c-sharp/
Example 1.3 : BillWagner (2024) Object and Collection Initializers - C#. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers.
Collection Initializer (C#) and Example 2.1, 2.3, 2.4 : BillWagner (2024b) Object and Collection Initializers - C#. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers.
Example 2.2 : GeeksforGeeks (2021) Object and Collection Initializer in C#. https://www.geeksforgeeks.org/object-and-collection-initializer-in-c-sharp/.
Object Initializer (Java) and Example 3.1 : W3Schools.com (no date). https://www.w3schools.com/java/java_encapsulation.asp.
Example 3.2 : Instance Initializer block in Java - javatpoint (no date). https://www.javatpoint.com/instance-initializer-block.
Collection Initializer (Java) and Example 3.3 : Java Arrays asList() method (no date). https://www.tutorialspoint.com/java/util/arrays_aslist.htm.
Object Initializer (Python) and Example 4.1 : Sumich, A. and Melnikov, E. (2024) Class constructors. https://diveintopython.org/learn/classes/object-instantiation.
Collection Initializer (Python) and Example 4.2 : GeeksforGeeks (2024) Literals in Python. https://www.geeksforgeeks.org/literals-in-python/.
C : บทเรียนภาษา C, สอนภาษา C เบื้องต้น - MarcusCode (no date). https://marcuscode.com/lang/c#google_vignette.
Object Initializer (C++) and Example 5.1 : GeeksforGeeks (2023) Aggregate Initialization in C++ 20. https://www.geeksforgeeks.org/aggregate-initialization-in-cpp-20/.
Collection Initializer (C++) and Example 5.2 : C++ Initializer List - javatpoint (no date). https://www.javatpoint.com/cpp-initializer-list.
Constructor : GeeksforGeeks (2020) C# | Constructors. https://www.geeksforgeeks.org/c-sharp-constructors/.
Item[TKey] : Dotnet-Bot (no date b) Dictionary.Item[TKey] Property (System.Collections.Generic). https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.item?view=net-8.0#system-collections-generic-dictionary-2-item(-0).
Last updated