::
การส่งค่าพารามิเตอร์ให้กับโปรแกรมย่อย
1.
การส่งค่าแบบส่งค่าไปอย่างเดียว (Pass
By Value)
เป็นการส่งค่าของตัวแปรไปอย่างเดียว
เมื่อมีการแก้ไขค่านั้นๆ
ในโปรแกรมย่อยที่รับคาเข้ามา
จะไม่กระทบต่อค่าของตัวแปรเดียวกันในโปรแกรมหลัก
ซึ่งใช้คำว่า ByVal หน้าพารามิเตร์ที่ส่ง
เพื่อบอกว่าเป็นพารามิเตอร์แบบส่งค่าไปอย่างเดียว
Sub MySub (ByVal Z As
Integer)
Z = Z * 5
End Sub |
ถ้ามีการเรียกโปรแกรมย่อย
MySub
Dim A As Integer
A = 9
MySub (A) |
2.
การส่งค่าแบบอ้างอิง (Pass By
Reference)
การส่งค่าแบบอ้างอิง
จะทำให้โปรแกรมย่อยที่ถูกเรียกใช้สามารถแก้ไขค่าของตัวแปรที่ส่งเป็นพารามิเตอร์นั้นได้
Sub MySub (ByRef Z As
Integer)
Z = Z * 5
End Sub |
ถ้ามีการเรียกโปรแกรมย่อย
MySub
Dim A As Integer
A = 9
MySub(A) |
ตัวอย่างโปรแกรมแสดงการส่งพารามิเตอร์ให้กับโปรแกรมย่อย
ขั้นตอนการสร้างโปรแกรม
1. เลือกโปรเจ็กต์ชนิด Windows
Application
แล้ววางคอนโทรลบนฟอร์มและกำหนดคุณสมบัติของฟอร์มและคอนโทรลต่างๆ
ชนิดของคอนโทรล
|
คุณสมบัติ
|
ค่าที่กำหนดให้
|
Form |
Text |
Form1 |
Name |
Form1 |
Command Button |
Text |
&Show result |
Name |
Button1 |
2.
ใส่คำสั่งโปรแกรมลงไปใน Code Editor
Private Sub
Button1_Click(ByVal sender
As System.Object, ByVal e As
System.EventArgs) Handles
Button1.Click
Dim A As Integer
A = 100
PassByValue(A)
Console.WriteLine("Pass
By Value Result = " &
Str(A))
A = 100
PassByReference(A)
Console.WriteLine("Pass
By reference Result = " &
Str(A))
End Sub
Sub PassByValue(ByVal A As
Integer)
A = 2 * A
End Sub
Sub PassByReference(ByRef A
As Integer)
A = 2 * A
End Sub |
3.
รันโปรแกรม
จะได้ผลลัพธ์การทำงานดังรูป
เมื่อ Click mouse
*
ค่าที่ได้จากการส่งค่าอย่างเดียว :
Pass By Value Result = 100
*
ค่าที่ได้จากการส่งค่าแบบอ้างอิง :
Pass By reference Result = 200
:: การใช้งานพารามิเตอร์แบบ Optional
การส่งพารามิเตอร์ให้กับโปรแกรมย่อย
เมื่อต้องการให้โปรแกรมย่อยรับค่าพารามิเตอร์เพียงบางตัว
ค่าพารามิเตอร์ที่ไม่ได้ส่งไป
จะต้องกำหนดค่าดีฟอลต์
เพราะโปรแกรมย่อยจะนำค่าดีฟอลต์ที่ถูกกำหนดมาเป็นค่าพารามิเตอร์แทน
Sub MySub(Optional X As
Integer = 1, Optional Y As
Integer = 1)
' ชุดคำสั่ง
End Sub |
การเรียกใช้งานโปรแกรมย่อย
เราไม่จำเป็นต้องส่งพารามิเตอร์ครบทั้ง
2 ตัว
แต่สามารถส่งพารามิเตอร์เพียงบางตัวได้
ค่าพารามิเตอร์ X
เท่ากับค่าของ A และพารามิเตอร์ Y
เท่ากับค่าดีฟอลต์คือ 1
Dim A As Integer
MySub(A) |
สำหรับตัวแปรแบบ
Optional จะต้องกำหนดค่าดีฟอลต์
ซึ่งเป็นค่าที่กำหนดให้โดยปริยาย
เมื่อไม่มีการส่งพารามิเตอร์ตัวนั้นไป
จากตัวอย่าง
ถ้ามีการเรียกใช้โปรแกรมย่อย
โดยที่ไม่ส่งค่าของพารามิเตอร์ X
โปรแกรมจะถือว่าพารามิเตอร์ X
มีค่าเท่ากับ 2
Sub MySub(Optional X As
Integer = 2, Optional Y As
Integer = 3)
' ชุดคำสั่ง
End Sub |
เมื่อมีการใช้พารามิเตอร์แบบ
Optional หลายตัวในโปรแกรมเดียวกัน
จะต้องระบุค่าที่ส่งให้กับโปรแกรมย่อยว่า
ถูกนำไปใช้เป็นค่าของพารามิเตอร์ตัวใดด้วยการใช้ข้อความ
<ชื่อพารามิเตอร์> : =
<ค่าที่จะส่งไป> |
ตัวย่างการเรียกใช้โปรแกรมย่อยแบบกำหนดว่าจะส่งค่าให้กับพารามิเตอร์ใด
MySub X:=1, Y:=2
MySub Y:=3 |
1 : ' การส่งค่า 1
ให้พารามิเตอร์ X ส่งค่า 2
ให้พารามิเตอร์ Y
2 : ' การส่งค่า 3
ให้พารามิเตอร์ Y แต่ไม่ส่งค่า X
::
การส่งพารามิเตอร์แบบไม่จำกัดจำนวน
คำสั่ง ParamArray
สามารถใช้รับพารามิเตอร์แบบไม่จำกัดจำนวนได้
จากตัวอย่าง
Function Sum(ByVal
ParamArray IntNums())
Dim a As Object, c As
Integer
For Each a In IntNums
c = c + a
Next
Sum = c
End Function
Private Sub Form1_Load(ByVal
sender As Object, ByVal e As
System.EventArgs) Handles
MyBase.Load
Console.WriteLine(Sum(4,
5, 7, 9, 10))
Console.WriteLine(Sum(4,
5, 7, 9, 10, 7))
End Sub |
ผลลัพธ์ของโปรแกรมจะได้
35 : เกิดจาก 4+5+7+9+10
42 : เกิดจาก 4+5+7+9+10+7
|