/ 365วันแห่งโปรแกรม

[365 วันแห่งโปรแกรม #day17] Out Parameter

วันที่สิบเจ็ดของ ‪#‎365วันแห่งโปรแกรม‬ วันนี้เราจะมีคุยกันเรื่อง Out Parameter


เมื่อหลายวันก่อนเราเคยพูดเรื่อง Parameter กันไปแล้วครั้งหนึ่ง ในวันนี้เราจะมาคุยกันเกี่ยวกับอีกรูปแบบหนึ่งของ Parameter นั่นคือ Output parameter

Out Parameter คืออะไร?

จริงๆ แล้ว Parameter ไม่ได้มีแค่หน้าที่ในการเป็นข้อมูล input อย่างเดียว แต่เราสามารถให้ parameter เป็น output ได้ด้วย อันที่จริงแล้วเราสามารถแบ่ง Parameter ออกเป็น 3 โหมดได้แก่ in, out, และ in out หรือ inout ในวันนี้เราจะพูดคุยกันเรื่อง Out Parameter หรือ Output Parameter ซึ่งมีหน้าที่ในการเป็น output ของฟังก์ชัน

เราจะสร้างฟังก์ชันที่มี Out Parameter ได้อย่างไร?

เราสามารถสร้างฟังก์ชันที่มี Out Parameter ด้วยการสร้างฟังก์ชันที่รับพารามิเตอร์แบบ reference (reference parameter) เมื่อเราส่งตัวแปรเข้าไปเป็น actual parameter แล้ว ฟังก์ชันจะสามารถแก้ไขค่าหรือ property ของค่านั้นได้ เสมือนว่าค่านั้นเป็น output ของฟังก์ชัน

ในบางภาษาโปรแกรมมีการ implement วิธีสร้าง Out Parameter โดยเฉพาะ เช่นใน C# เราสามารถใช้ keyword out นำหน้า type ของพารามิเตอร์ที่จะให้เป็น Out Parameter

public static void Foo(out int a)
{
	a = 10;
}

static void Main(string[] args)
{
	int a;
	Foo(out a);
	Console.WriteLine(a);
}

==output==
10

*การ pass by reference นั้น ตัวแปรฝั่ง input ต้องไม่เป็น null แต่ถ้าเป็น out parameter แบบใน C# out parameter ที่ใส่ไปนั้นไม่จำเป็นต้อง initial ใดๆ เพราะมันบังคับให้กำหนดค่าใหม่จากในฟังก์ชันทุกครั้ง

แล้ว Out Parameter มีประโยชน์ที่จับต้องได้ไหม?

ในบางภาษาเช่น C++ การ return ค่าของฟังก์ชันกลับไปนั้นต้นทุนค่อนข้างสูง เพราะว่าโปรแกรมจะทำการ copy ค่าที่จะ return กลับไปให้ผู้รับ ซึ่งถึงว่าแพงกว่าการเปลี่ยนค่าที่ส่งมาในพารามิเตอร์ แต่ในปัจจุบันมีการใช้เทคนิคที่เรียกว่า Return value optimization เพื่อลดการทำงานในส่วนนี้ทำให้ความคุ้มค่าที่ได้จากการใช้ Out Parameter มีน้อยลง อีกทั้งการเขียนโค้ดแบบ Out Parameter นั้นทำให้อ่านยากกว่าปกติอีกด้วย

ประโยชน์ที่เห็นได้ชัดอีกอย่างของ Out Parameter คือทำให้เราสามารถสร้างฟังก์ชันที่มี Output หลายตัวได้ โดยไม่ต้องสร้าง complex object ขึ้นมาครอบ

‪#‎day17 #365วันแห่งโปรแกรม ‪#‎โครงการ365วันแห่ง‬...