Out Parameter with Examples

พนิดา อินชัย 650710569

Out Parameter หรือ Output Parameter เป็นพารามิเตอร์ที่ไม่จำเป็นต้องกำหนดค่าเริ่มต้นตัวแปรก่อนส่งไปในเมธอด แต่ต้องมีการกำหนดค่าภายในเมธอด และสามารถคืนค่าจากเมธอดผ่านพารามิเตอร์นั้นได้โดยไม่ต้องใช้การ return ซึ่งการส่งพารามิเตอร์ไปในเมธอดจะเป็นการส่งตัวแปรนั้นๆไปจริง(หน่วยความจำเดียวกัน) เหมือนกับ Reference Parameter นอกจากนั้น Out Parameter จะมีการใช้คีย์เวิร์ด out หน้าตัวพารามิเตอร์ที่ต้องการส่งค่า มักใช้เมื่อเมธอดต้องการส่งคืนค่าหลายค่า


Examples of Out Parameter

One Out Parameter

ตัวอย่างที่ 1

using System;

class GFG {

	static public void Main()
	{
		int i; // ไม่กำหนดค่าเริ่มต้น
		
		Addition(out i);

		Console.WriteLine("The addition of the value is: {0}", i);
	}
	public static void Addition(out int i)
	{
		i = 30;
		i += i;
	}
	
}
  • บรรทัดที่ 7 สร้างตัวแปร i แต่ยังไม่มีการกำหนดค่า

  • บรรทัดที่ 9 มีการเรียกใช้เมธอด Addition และมีการส่งค่าพารามิเตอร์ i ที่มีการใช้คีย์เวิร์ด out ในเมธอด Addition (เป็นการส่งตัวแปร i ไป ค่าของ i สามารถถูกกำหนดหรือเปลี่ยนได้)

  • บรรทัดที่ 11 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Addition โดยการแสดง The addition of the value is: 60

  • บรรทัดที่ 13 รับพารามิเตอร์ซึ่งเป็นตัวแปร i จากการเรียกใช้ในบรรทัดที่ 15

  • บรรทัดที่ 15 กำหนดค่าให้ตัวแปร i ให้มีค่าเท่ากับ 30

  • บรรทัดที่ 16 ทำการบวกค่าของตัวแปร i ด้วย i ซึ่งจะทำให้ตัวแปร i มีค่าเท่ากับ 60

Multiple Out Parameter

ตัวอย่างที่ 1

  • บรรทัดที่ 8 สร้างตัวแปร i และ j แต่ยังไม่มีการกำหนดค่า

  • บรรทัดที่ 10 มีการเรียกใช้เมธอด Addition และมีการส่งค่าพารามิเตอร์ i และ j ที่มีการใช้คีย์เวิร์ด out ในเมธอด Addition (เป็นการส่งตัวแปร i, j ไป ค่าของ i, j สามารถถูกกำหนดหรือเปลี่ยนได้)

  • บรรทัดที่ 12 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Addition โดยการแสดง The addition of the value is: 60 (แสดงค่า p)

  • บรรทัดที่ 13 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Addition โดยการแสดง The addition of the value is: 80 (แสดงค่า q)

  • บรรทัดที่ 16 เมธอด Addition รับพารามิเตอร์ซึ่งเป็นตัวแปร i และ j จากการเรียกใช้ในบรรทัดที่ 15 แต่เขียนเป็นตัวแปร p และ q

  • บรรทัดที่ 18 กำหนดค่าให้ตัวแปร p ให้มีค่าเท่ากับ 30

  • บรรทัดที่ 19 กำหนดค่าให้ตัวแปร q ให้มีค่าเท่ากับ 40

  • บรรทัดที่ 20 ทำการบวกค่าของตัวแปร p ด้วย p ซึ่งจะทำให้ตัวแปร i มีค่าเท่ากับ 60

  • บรรทัดที่ 21 ทำการบวกค่าของตัวแปร q ด้วย q ซึ่งจะทำให้ตัวแปร i มีค่าเท่ากับ 80

ตัวอย่างที่ 2

  • บรรทัดที่ 9 เรียกใช้เมธอด CalculateCircumferenceAndArea และมีการส่งค่าพารามิเตอร์ radiusValue, out circumferenceResult และout areaResult

  • บรรทัดที่ 10 แสดงผลหลังจากมีการเรียกใช้เมธอด CalculateCircumferenceAndArea โดยการแสดง Circumference of a circle with a radius of 3.92781 is 24.678820426416294.

  • บรรทัดที่ 11 แสดงผลหลังจากมีการเรียกใช้เมธอด CalculateCircumferenceAndArea โดยการแสดง Area of a circle with a radius of 3.92781 is 48.46641068266597.

  • บรรทัดที่ 12 เป็นคำสั่งรอการป้อนข้อมูลหรือกด Enter ก่อนจะดำเนินการต่อ

  • บรรทัดที่ 16 เมธอด CalculateCircumferenceAndArea รับพารามิเตอร์จากการเรียกใช้เมธอด บรรทัดที่ 9

  • บรรทัดที่ 18 กำหนดให้ตัวแปร circumference เท่ากับค่าที่หาได้จาก 2 * Math.PI * radius คือ 24.678820426416294

  • บรรทัดที่ 19 กำหนดให้ตัวแปร area เท่ากับค่าที่หาได้จาก Math.PI * (radius * radius) คือ 48.46641068266597


เปรียบเทียบกับภาษา Java, C, Python

Java

Java ไม่รองรับการการทำ out parameter โดยตรงเหมือน C# เพราะ Java มีการส่งพารามิเตอร์แบบ pass by value คือจะส่งค่าของตัวแปรไป ไม่ได้เป็นการส่งตัวแปรจริงไป เพื่อให้ Java มีการทำงานที่คล้าย out parameter สามารถทำได้โดยการห่อพารามิเตอร์ไว้ในออบเจ็กต์ หรือใช้อาเรย์เก็บค่าที่ต้องการแก้ไขหรือส่งคืน

C#

  • บรรทัดที่ 3 รับพารามิเตอร์ x, y, out result, out remainder จากการเรียกใช้ในบรรทัดที่ 14

  • บรรทัดที่ 4 กำหนดค่าให้ตัวแปร divide_result ให้มีค่าเท่ากับ x / y

  • บรรทัดที่ 5 กำหนดค่าให้ตัวแปร divide_remainder ให้มีค่าเท่ากับ x % y

  • บรรทัดที่ 12 สร้างตัวแปร result และ remainder แต่ยังไม่มีการกำหนดค่า

  • บรรทัดที่ 13 มีการเรียกใช้เมธอด Divide และมีการส่งค่าพารามิเตอร์ x, y, out result, out remainder

  • บรรทัดที่ 14 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Divide ในรูปแบบ x / y = result r remainder

Java

  • บรรทัดที่ 3 สร้างคลาส Result เพื่อเก็บค่า result และ remainder

  • บรรทัดที่ 14 รับพารามิเตอร์ x, y, result (ออบเจ็บของคลาส Result)

  • บรรทัดที่ 15 เปลี่ยนค่าตัวแปร result ของคลาส Result ให้เท่ากับ x / y

  • บรรทัดที่ 16 เปลี่ยนค่าตัวแปร remainder ของคลาส Result ให้เท่ากับ x % y

  • บรรทัดที่ 17 แสดงผลลัพธ์ ในรูปแบบ x / y = result r remainder

  • บรรทัดที่ 24 สร้างออบเจ็กต์ใหม่ของคลาส Result

  • บรรทัดที่ 25 เรียกใช้งานเมธอด divide และส่งพารามิเตอร์ x, y, result (ออบเจ็บของคลาส Result)

จากโค้ด Java จะเห็นได้ว่ามีการห่อพารามิเตอร์ไว้ในออบเจ็ต์ของคลาส Result เพื่อแก้ไขค่าของพารามิเตอร์นั้นๆ เมื่อมีการแก้ไขตอนเรียกใช้เมธอด และให้มีการทำงานที่คล้ายกับการใช้คีย์เวิร์ด out ใน C#

C

C ไม่รองรับการทำ out parameter แต่สามารถทำให้มีการทำงานคล้ายได้ โดยการส่งค่าผ่าน pointer เพื่อให้สามารถเปลี่ยนค่าของตัวแปรนั้นๆได้

C#

  • บรรทัดที่ 10 แสดงข้อความ Please enter radius for circle เพื่อให้ผู้ใช้ป้อนรัศมี

  • บรรทัดที่ 11 ประกาศตัวแปร radius เป็นชนิด double เพื่อเก็บค่าของตัวแปร radius ที่ได้จากการรับค่าจากผู้ใช้และแปลงเป็น double

  • บรรทัดที่ 12 ประกาศตัวแปร circumference เป็นชนิด double เพื่อเก็บค่าจากการเรียกใช้เมธอด CalculateCircle ที่ส่งพารามิเตอร์ radius, out area

  • บรรทัดที่ 13 แสดงผลลัพธ์ของเส้นรอบวง คือ Circle's circumference is 21.991148575128552

  • บรรทัดที่ 14 แสดงผลลัพธ์ของพื้นที่วงกลม คือ Circle's Area is 38.48451000647496

  • บรรทัดที่ 18 เมธอด CalculateCircle รับพารามิเตอร์ radius, out area

  • บรรทัดที่ 20 คำนวณพื้นที่แล้วเก็บค่าไว้ในตัวแปร area

  • บรรทัดที่ 21 ประกาศตัวแปร circumference เป็นชนิด double โดยจะเก็บค่าที่คำนวณเส้นรอบวง

  • บรรทัดที่ 22 คืนค่าเส้นรอบวง(ค่าของตัวแปร circumference)ไปยังตัวที่เรียกใช้

จะเห็นได้ว่าบรรทัดที่ 22 จะไม่มีการคืนค่าของตัวแปร area เพราะ area ถูกส่งมาเป็น out parameter จึงไม่ต้อง return ค่ากลับ

C

  • บรรทัดที่ 5 เมธอด CalculateCircle รับพารามิเตอร์ radius และ area แบบ pointer เพื่อให้สามารถเปลี่ยนค่าของตัวแปร area ได้

  • บรรทัดที่ 6 คำนวณพื้นที่ของวงกลมแล้วเก็บค่าตรงที่อยู่ที่ area ชี้้ไป

  • บรรทัดที่ 7 คำนวณเส้นรอบวงแล้วเก็บที่ตัวแปร circumference

  • บรรทัดที่ 8 คืนค่าเส้นรอบว(ค่าของตัวแปร circumference)ไปยังตัวที่เรียกใช้

  • บรรทัดที่ 12 ประกาศตัวแปร radius, circumference, area

  • บรรทัดที่ 15 แสดงข้อความ Please enter radius for circle เพื่อให้ผู้ใช้กรอกรัศมี

  • บรรทัดที่ 16 รอรับค่ารัศมีจากผู้ใช้ แล้วเก็บในตัวแปร radius

  • บรรทัดที่ 19 ประกาศตัวแปร circumference เป็นชนิด double เพื่อเก็บค่าจากการเรียกใช้เมธอด CalculateCircle ที่ส่งพารามิเตอร์ radius, & area (ที่อยู่ของตัวแปร area)

  • บรรทัดที่ 22 แสดงผลลัพธ์ของเส้นรอบวง คือ Circle's circumference is 21.991148575128552

  • บรรทัดที่ 23 แสดงผลลัพธ์ของพื้นที่วงกลม คือ Circle's Area is 38.48451000647496

เห็นได้ว่าการส่งค่า pointer ใน C จะคล้ายกับการส่ง out parameter สามารถแก้ไขหรือเปลี่ยนค่าของตัวแปรนั้นๆได้เหมือนกัน

Python

Python ไม่รองรับการทำ out parameter แต่ Python สามารถส่งคืนค่าหลายค่าได้เหมือนการใช้ out parameter ใน C# โดยการใช้ tuple ในการคืนค่าหลายค่า แต่ยังต้องกำหนดค่าเริ่มต้นให้ตัวแปรนั้นๆ

C#

  • บรรทัดที่ 11 สร้างตัวแปร i และ j แต่ยังไม่มีการกำหนดค่า

  • บรรทัดที่ 15 มีการเรียกใช้เมธอด Addition และมีการส่งค่าพารามิเตอร์ i และ j ที่มีการใช้คีย์เวิร์ด out ในเมธอด Addition (เป็นการส่งตัวแปร i, j ไป ค่าของ i, j สามารถถูกกำหนดหรือเปลี่ยนได้)

  • บรรทัดที่ 18 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Addition โดยการแสดง The addition of the value is: 60 (แสดงค่า p)

  • บรรทัดที่ 19 จะเป็นการแสดงผลหลังจากมีการเรียกใช้เมธอด Addition โดยการแสดง The addition of the value is: 80 (แสดงค่า q)

  • บรรทัดที่ 25 เมธอด Addition รับพารามิเตอร์ซึ่งเป็นตัวแปร i และ j จากการเรียกใช้ในบรรทัดที่ 15 แต่เขียนเป็นตัวแปร p และ q

  • บรรทัดที่ 27 กำหนดค่าให้ตัวแปร p ให้มีค่าเท่ากับ 30

  • บรรทัดที่ 28 กำหนดค่าให้ตัวแปร q ให้มีค่าเท่ากับ 40

  • บรรทัดที่ 29 ทำการบวกค่าของตัวแปร p ด้วย p ซึ่งจะทำให้ตัวแปร i มีค่าเท่ากับ 60

  • บรรทัดที่ 30 ทำการบวกค่าของตัวแปร q ด้วย q ซึ่งจะทำให้ตัวแปร i มีค่าเท่ากับ 80

Python

  • บรรทัดที่ 1-6 เมธอด addition กำหนดค่าเริ่มต้นให้ p = 30 , q = 30 จากนั้นทำการบวกค่าของ p ด้วย p และ q ด้วย q จากนั้นทำการคืนค่าของตัวแปร p และ q ในรูปแบบของ tuple

  • บรรทัดที่ 9 เรียกใช้เมธอด addition ได้รับค่าของ p และ q ที่ถูกบวกแล้วมาเก็บในตัวแปร i และ j (เป็นการับค่าหลายค่าจาก tuple)

  • บรรทัดที่ 12 -13 แสดงค่าที่ได้จากเมธอด addition โดยใช้รูปแบบ f-string แสดงเป็น The addition of the value is: 60 และ The addition of the value is: 80

จะเห็นได้ว่าการใช้ tuple ของ Python ทำให้ Python สามารถคืนค่าได้หลายค่าเหมือนการใช้ out parameter ใน C# Python จึงไม่จำเป็นต้องมี out parameter เพราะมีการใช้ tuple ทดแทนการคืนค่าหลายค่าจากการใช้ out parameter แล้ว


Video & Slide Presentation

Video Presentation

Slide Presentation


Reference

  • ใช้ในการศึกษา Out Parameter, การทำงานของ Out Parameter, การยกตัวอย่างที่ 2 ของ Multiple out Parameterและตัวอย่างโค้ด C# เพื่อนำไปเปรียบเทียบกับ C

Article. (30 มีนาคม 2567). out keyword. Microsoft.https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out

  • ใช้ในการยกตัวอย่างของ one out parameter และตัวอย่างที่1 ของ Multiple out Parameter

ankita_saini. (1 ตุลาคม 2564). Out Parameter With Examples in C#. GeeksforGeeks. https://www.geeksforgeeks.org/out-parameter-with-examples-in-c-sharp/

  • ใช้ในการหาข้อมูลเปรียบเทียบระหว่าง Java และ C#

Sheeraz Gul. (12 ตุลาคม 2566). Java Out Parameter. DelftStack. https://www.delftstack.com/howto/java/java-out-parameter/#author

  • ใช้ในการหาข้อมูลเปรียบเทียบระหว่าง Python และ C#

nedbat และ JelleZijlstra. (1 ตุลาคม 2564). The Python Tutorial. docs.python. https://docs.python.org/3/tutorial/controlflow.html#defining-functions

  • ใช้ในการหาข้อมูลเปรียบเทียบระหว่าง C และ C#

Merlin Wellington. (18 มกราคม 2567). Intro to C Pointers - Output Parameters (C - Pointers - 1).[Video]. YouTube. https://www.youtube.com/watch?v=mr9pGC6FAzw

Last updated