Params in C#

เสฏฐนันท์ พจมานวิมล 650710099

Params ในภาษา C# หมายถึง คำสั่งที่ใช้ในการประกาศอาร์กิวเมนต์ในรูปแบบของอาร์เรย์ ซึ่งช่วยให้คุณสามารถส่งค่าหลายค่าผ่านไปยังเมธอด โดยไม่จำเป็นต้องกำหนดจำนวนของอาร์กิวเมนต์ล่วงหน้า คำสั่งนี้จะใช้เมื่อคุณไม่แน่ใจว่าผู้ใช้จะส่งค่าเข้ามากี่ค่า และต้องการความยืดหยุ่นในการรับค่าเหล่านั้น

อย่างเช่น

public void PrintNames(params string[] names)
{
    foreach (string name in names)
    {
        Console.WriteLine(name);
    }
}

สิ่งสำคัญเกี่ยวกับ Params Keyword

  • Params มีประโยชน์เมื่อโปรแกรมเมอร์ไม่มีความรู้ล่วงหน้าเกี่ยวกับจำนวนพารามิเตอร์ที่จะใช้

  • อนุญาตให้ใช้คำสำคัญ Params ได้เพียงหนึ่งคำ และจะไม่อนุญาตให้มี Params เพิ่มเติมในการประกาศฟังก์ชันหลัง params

  • ความยาวของ Params จะเป็นศูนย์หากไม่มีการส่งอาร์กิวเมนต์

ข้อดีของ Params

  • Flexibility Params ช่วยให้เมธอดรับอาร์กิวเมนต์ได้ไม่จำกัดจำนวน

  • Readability ทำให้โค้ดกระชับและเข้าใจง่ายขึ้น

  • Maintenance ลดโค้ดซ้ำและข้อผิดพลาด ทำให้ดูแลโค้ดง่ายขึ้น

ข้อเสียของ Params

  • Performance Params อาจทำให้โปรแกรมช้าลงเล็กน้อย

  • Limited to one array ใช้ได้แค่ array หนึ่งชุดต่อเมธอด

  • Type restriction ใช้ได้กับ array มิติเดียวเท่านั้น

ในบางครั้ง ในขณะที่ประกาศเมธอด คุณไม่แน่ใจเกี่ยวกับจํานวนอาร์กิวเมนต์ที่ส่งผ่านเป็นพารามิเตอร์ อาร์เรย์พารามิเตอร์ C#

Example

Example 1
using System;  
namespace AccessSpecifiers  
{  
    class Program  
    {  
        // User defined function  
        public void Show(params int[] val) // Params Paramater  
        {  
            for (int i=0; i<val.Length; i++)  
            {  
                Console.WriteLine(val[i]);  
            }  
        }  
        // Main function, execution entry point of the program  
        static void Main(string[] args)  
        {  
            Program program = new Program(); // Creating Object  
            program.Show(2,4,6,8,10,12,14); // Passing arguments of variable length  
        }  
    }  
}  

โค้ดนี้เป็นโปรแกรมตัวอย่างในภาษา C# ที่แสดงวิธีการใช้ params เพื่อรับอาร์กิวเมนต์ที่มีความยาวไม่จำกัดในฟังก์ชัน Show() ภายใต้ namespace AccessSpecifiers

Example 2

using System;  
namespace AccessSpecifiers  
{  
    class Program  
    {  
        // User defined function  
        public void Show(params object[] items) // Params Paramater  
        {  
            for (int i = 0; i < items.Length; i++)  
            {  
                Console.WriteLine(items[i]);  
            }     
        }  
        // Main function, execution entry point of the program  
        static void Main(string[] args)  
        {  
            Program program = new Program(); // Creating Object  
            program.Show("Ramakrishnan Ayyer","Ramesh",101, 20.50,"Peter", 'A'); // Passing arguments of variable length  
        }     
    }  
}  

โค้ดนี้เป็นโปรแกรมในภาษา C# ที่ใช้ params เพื่อรับอาร์กิวเมนต์ที่มีจำนวนและประเภทต่าง ๆ แบบไม่จำกัดในฟังก์ชัน Show()รับอาร์กิวเมนต์หลายตัวผ่าน params object[] items ซึ่งทำให้ฟังก์ชันสามารถรับอาร์กิวเมนต์หลายชนิดได้ เช่น string, int, double, char เป็นต้น

เปรียบเทียบการใช้ Params ในภาษา C# กับภาษาต่างๆ

using System;

class Program
{

    public void Show(params int[] numbers)
    {
        foreach (int num in numbers)
        {
            Console.WriteLine(num);
        }
    }

    static void Main(string[] args)
    {
        Program program = new Program();
        program.Show(1, 2, 3, 4, 5);  // ส่งค่าได้หลายตัว
    }
}

จากที่เปรียบเทียบ Code กับภาษาต่างๆแล้ว เมื่อรันโค้ดในแต่ละภาษา จะเห็นว่า output ของโปรแกรมในทุกภาษาแสดงตัวเลข 1 ถึง 5 โดยเรียงตามลำดับที่ส่งเข้าไปในฟังก์ชันที่ใช้ ตามลำดับ

  • C#: ใช้ params เพื่อรับอาร์กิวเมนต์หลายตัว

  • Java: ใช้ varargs ซึ่งรับอาร์กิวเมนต์ไม่จำกัดในรูปแบบของ array

  • C: ใช้ va_list, va_start, va_arg สำหรับการจัดการอาร์กิวเมนต์หลายตัว

  • Python: ใช้ *args เพื่อรับอาร์กิวเมนต์ไม่จำกัด

ซึ่งทุกภาษามีแนวทางเฉพาะในการรับจำนวนอาร์กิวเมนต์ที่ไม่จำกัด ที่ช่วยให้ฟังก์ชันหรือเมธอดมีความยืดหยุ่นมากขึ้นในแง่ของจำนวนอินพุตที่รองรับ

Video Presentation


Slide Presentation


Reference

จุดเด่นของ params
C# Params Arrays
ตัวอย่าง Code คร่าวๆ
ข้อดี,ข้อเสีย

Last updated