Page cover image

Optional Parameters

ปัญญารัตน์ เกนวิถี 650710566

Optional Parameters:

พารามิเตอร์ในเมธอดที่ไม่จำเป็นต้องส่งค่าผ่านพารามิเตอร์ทุกตัวเมื่อเรียกใช้เมธอดนั้น หากไม่ส่งค่า ระบบจะใช้ค่าที่ถูกกำหนดโดยโปรแกรมเมอร์ (default value) แทน แต่ถ้าหากมีการส่งค่า จะใช้ค่าที่ถูกส่งแทน default value โดยมักใช้ในกรณีที่ต้องการให้เมธอดมีความยืดหยุ่นมากขึ้น

Key Points:

  1. ใช้พารามิเตอร์แบบเลือกได้ใน Method, Constructors, Indexers และ Delegates

  2. มีการกำหนด default value ในส่วนของการประกาศ

  3. default value ต้องเป็นนิพจน์คงที่

  4. ต้องถูกประกาศไว้เป็นพารามิเตอร์ตัวสุดท้าย เพื่อป้องกันความสับสนและความชัดเจนในการเรียกใช้

  5. (ในกรณีที่การใช้ 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