Optional Parameters
ปัญญารัตน์ เกนวิถี 650710566
Optional Parameters:
พารามิเตอร์ในเมธอดที่ไม่จำเป็นต้องส่งค่าผ่านพารามิเตอร์ทุกตัวเมื่อเรียกใช้เมธอดนั้น หากไม่ส่งค่า ระบบจะใช้ค่าที่ถูกกำหนดโดยโปรแกรมเมอร์ (default value) แทน แต่ถ้าหากมีการส่งค่า จะใช้ค่าที่ถูกส่งแทน default value โดยมักใช้ในกรณีที่ต้องการให้เมธอดมีความยืดหยุ่นมากขึ้น
Key Points:
ใช้พารามิเตอร์แบบเลือกได้ใน Method, Constructors, Indexers และ Delegates
มีการกำหนด default value ในส่วนของการประกาศ
default value ต้องเป็นนิพจน์คงที่
ต้องถูกประกาศไว้เป็นพารามิเตอร์ตัวสุดท้าย เพื่อป้องกันความสับสนและความชัดเจนในการเรียกใช้
(ในกรณีที่การใช้ Optional Parameter มากกว่าหนึ่งตัว) ต้องส่งค่าสำหรับ Optional Parameters ที่อยู่ก่อนหน้าทั้งหมดด้วย โดยไม่สามารถมีช่องว่างได้
ตอนที่ควรจะใช้ Optional Parameters:
ใช้เมื่อการทำให้โค้ดอ่านง่ายและสะดวกขึ้น และเมื่อคุณต้องการกำหนดค่า default value สำหรับพารามิเตอร์บางตัวในเมธอด แต่ยังต้องการให้มีความยืดหยุ่นในการเรียกใช้เมธอดนั้น
ตอนที่ควรเลี่ยง Optional Parameters:
หากใช้ Optional Parameters ทำให้การเรียกเมธอดมีความกำกวม หรืออ่านได้ยาก ควรเลี่ยง
ควรหลีกเลี่ยงการใช้ Optional Parameters มากเกินไปในเมธอดเดียว หากเลือกจำนวนมากอาจเข้าใจได้ยากและซับซ้อน
หาก Optional Parameters ทำให้เกิดปัญหาที่เกี่ยวกับ Type ควรใช้การโอเวอร์โหลดเมธอดหรือเทคนิคอื่น ๆ เพื่อรักษาความปลอดภัยของ Type
Advantages
เพิ่มประสิทธิภาพของโค้ด เพราะว่าไม่ต้องมีการทำ Overloading Parameters
การเรียกฟังก์ชันที่ยืดหยุ่น
ช่วยเพิ่มความอ่านโค้ดให้ง่ายขึ้น
ช่วยให้สามารถใช้งานเมธอดได้ดีขึ้น โดยการกำหนดอย่างชัดเจนว่าสิ่งใดเป็นสิ่งจำเป็นสำหรับการทำงาน และสิ่งใดไม่จำเป็น ซึ่งช่วยให้ทราบว่าควรส่งค่าใดบ้างและค่าใดที่ไม่จำเป็นต้องส่ง
Example:
static public void scholar(string fname,
string lname,
int age = 19,
string branch = "Computer science")
{
Console.WriteLine("First name: {0}", fname);
Console.WriteLine("Last name: {0}", lname);
Console.WriteLine("Age: {0}", age);
Console.WriteLine("Branch: {0}", branch);
}
// Main Method
static public void Main()
{
// Calling method
scholar("Dobby", "FreeElf"); //ใช้ default value ทั้งในส่วน Age และ Branch
scholar("Draco", "Malfoy", 22); //ใช้ default value ในส่วน Branch
scholar("Harry", "Potter", 21, "Information Technology"); //ไม่ได้ใช้ default value
}
เปรียบเทียบ Java/C/Python
Java
ใน Java ไม่มีการใช้ Optional Parameters ได้โดยตรง แต่สามารถใช้การ Overloading Method
public class Scholar {
public static void scholar(String fname, String lname) {
scholar(fname, lname, 19, "Computer Science");
}
public static void scholar(String fname, String lname, int age) {
scholar(fname, lname, age, "Computer Science");
}
public static void scholar(String fname, String lname, int age, String branch) {
System.out.println("First name: " + fname);
System.out.println("Last name: " + lname);
System.out.println("Age: " + age);
System.out.println("Branch: " + branch);
}
// Main Method
public static void main(String[] args) {
// Calling methods
scholar("Dobby", "FreeElf");
scholar("Draco", "Malfoy", 22);
scholar("Harry", "Potter", 21, "Information Technology");
}
}
C
ในภาษา C สามารถเลียนแบบ Optional Parameters ได้โดยใช้การ implement functions (ใช้ Pointer) หรือการใช้ variadic functions
#include <stdio.h>
void scholar(const char *fname, const char *lname, int *age, const char *branch) {
if (age == NULL) {
age = (int[]){19}; // default value
}
printf("First name: %s\n", fname);
printf("Last name: %s\n", lname);
printf("Age: %d\n", *age);
printf("Branch: %s\n", branch);
}
int main() {
int age = 22;
scholar("Dobby", "FreeElf", NULL, "Computer Science");
scholar("Draco", "Malfoy", &age, "Information Technology");
return 0;
}
Python
สำหรับภาษา Python สามารถใช้ Optional Parameters ได้เหมือนกับ C# แต่มีความยืดหยุ่นมากกว่าในด้านการกำหนด Optional Parameters
def scholar(fname, lname, age=19, branch="Computer Science"):
print("First name:", fname)
print("Last name:", lname)
print("Age:", age)
print("Branch:", branch)
# Main Method
if __name__ == "__main__":
# Calling method
scholar("Dobby", "FreeElf")
scholar("Draco", "Malfoy", 22)
scholar("Harry", "Potter", 21, "Information Technology")
VDO Clip:
Presentation:
References:
บทความความหมายของ Optional Parameters:
Microsoft. (2024). Named and Optional Arguments (C# Programming Guide). สืบค้น 5 ตุลาคม 2567, จากhttps://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments
บทความความหมายของ Optional Parameters:
GeeksforGeeks. (2019). C# | Optional Parameters. สืบค้น 5 ตุลาคม 2567, จากhttps://docs.python.org/3/tutorial/controlflow.html#default-argument-values
บทความตอนที่ควรและหลีกเลี่ยงของ Optional Parameters:
BEN ABT. (2023). When to use optional arguments and parameter defaults in c#. สืบค้น 5 ตุลาคม 2567, จากhttps://medium.com/medialesson/when-to-use-optional-arguments-and-parameter-defaults-in-c-c78ca71bd15e
บทความประโยชน์ของ Optional Parameters:
ByteHide. (2023). Advantages of Using C# Functions with Optional Parameters. สืบค้น 5 ตุลาคม 2567, จากhttps://www.bytehide.com/blog/optional-parameters-csharp
บทความของ Optional Parameters ใน Java:
Mehul Mohan. (2023). What are optional parameters in Java. สืบค้น 5 ตุลาคม 2567, จากhttps://codedamn.com/news/java/what-are-optional-parameters-in-java
บทความของ Optional Parameters ใน C:
Python Software Foundation. (2024). Default Argument Values. สืบค้น 5 ตุลาคม 2567, จากhttps://docs.python.org/3/tutorial/controlflow.html#default-argument-values
บทความของ Optional Parameters ใน Python:
Microsoft. (2021). Arguments. สืบค้น 5 ตุลาคม 2567, จากhttps://learn.microsoft.com/en-us/cpp/c-language/arguments?view=msvc-170
Last updated