บทที่ 2 ตอน 2 การใช้งานโปรแกรมย่อยแบบคืนค่ากลับ
2. การใช้งานโปรแกรมย่อยแบบคืนค่ากลับ (Function) โปรแกรมย่อยชนิดนี้เมื่อจบการทำงานแล้วจะสามารถส่งผลการทำงานกลับมาให้ผู้ที่เรียกใช้งานฟังก์ชันนั้น(Return) โดยปกติเราจะระบุคำสั่ง Return
ไว้ตำแหน่งบรรทัดสุดท้ายก่อนจบการทำงานของฟังก์ชันเสมอ พร้อมส่งค่ากลับให้ผู้เรียกใช้
รูปแบบการประกาศเมธอดที่คืนค่า
|1| Function ชื่อฟังก์ชั่น(
[รายการพารามิเตอร์]) As ชนิดข้อมูลที่จะคืนค่ากลับ
|2|
|3| … ประโยคคำสั่ง….
|4|
|5| Return ค่าที่ต้องการส่งค่ากลับ
|6| End Function
ข้อสังเกตของเมธอดที่คืนค่าคือ ในบรรทัดที่ 1 จะต้องแจ้งให้ VB.NET
ทราบว่าจะมีการประกาศฟังก์ชั่นโดยใช้คำว่า Function
และจะต้องบอกชนิดการส่งค่ากลับเป็นลักษณะเหมือนการประกาศตัวแปรโดยทั่วไป
และในบรรทัดที่ 5 ซึ่งจะมีคำสั่ง Return เพื่อจะส่งค่าจากการประมวลผลของฟังก์ชั่นกลับออกไปซึ่งการส่งค่ากลับหรือ
Return นั้นจะต้องมีค่าที่สัมพันธ์กับชนิดการส่งค่ากลับในบรรทัดที่
1 ด้วย
เพื่อให้เกิดความเข้าใจมายิ่งขึ้น โปรดพิจารณาเมธอด doGrade() ซึ่งการคำนวณเกรดซึ่งจะมีการรับค่าคะแนน
ผ่านตัวแปรพารามิเตอร์ชนิดตัวเลขจำนวนเต็ม (Integer)
และฟังก์ชั่นได้มีการส่งค่ากลับของค่าที่เก็บในตัวแปร Result ออกไปเป็นชนิดข้อความ (String) ซึ่งจะเป็นค่าเกรด
การเขียนโค้ดเพื่อสร้างเมธอด
doGrade()
|1| Function doGrade(prmScore
As Integer) As String
|2| Dim Score As Integer
|3| Dim Result As String =
""
|4|
|5| Score = prmScore
|6| If Score >= 80 And
Score <= 100 Then
|7| Result = "A"
|8| ElseIf Score >= 70 And
Score <= 79 Then
|9| Result = "B"
|10| ElseIf Score >= 60
And Score <= 69 Then
|11| Result = "C"
|12| ElseIf Score >= 50
And Score <= 59 Then
|13| Result = "D"
|14| ElseIf Score >= 0 And
Score <= 49 Then
|15| Result = "E"
|16| End If
|17|
|18| Return Result
|19| End Function
การเรียกใช้เมธอด doGrade() ในโด้ดคำสั่งจากตัวอย่างต่อไปนี้
จะเป็นการส่งค่าอาร์กิวเมนต์ คือผลคะแนนดิบในช่วง 1 ถึง 100
และแสดงผลออกทางกล้องข้อความ โดยเหตุการณ์จะเกิดขึ้นเมื่อมีการคลิกที่ปุ่ม
btnScore1 ดังนั้นการทดสอบโปรแกรม จะต้องมีตัวควบคุม Button
วางในฟอร์มโดยตั้งชื่อปุ่มคือ btnScore1 ซึ่งจะใช้ในการทดสอบโค้ดขณะที่เรียกใช้เมธอด
doGrade()
การเขียนโค้ดเพื่อเรียกใช้เมธอด
|1| Private Sub btnScore1_Click(....) Handles btnScore1.Click
|2| Dim Grade As String
|3| Grade = doGrade(85)
|4| MessageBox.Show(Grade)
|5| End Sub
สำหรับการทำความเข้าใจเกี่ยวกับเรื่องของเมธอดที่มีการคืนค่านี้นักศึกษาสามารถศึกษาได้จากใบงานท้ายบทนี้
การผ่านค่าตัวแปรในโปรแกรมย่อย
การใช้งาน Sub routine หรือ Function อาจจะต้องส่งผ่านค่าตัวแปร เพื่อประกอบในการทำงานของโปรแกรมย่อย
ซึ่งเรียกค่าของข้อมูลที่ส่งไปให้โปรแกรมย่อย หรือฟังก์ชันว่า อาร์กิวเมนต์ (Argument) และตัวแปรในโปรแกรมย่อยหรือฟังก์ชั่นที่จะมารอรับค่า
เรียกว่า ตัวแปรพารามิเตอร์(Parameter)
ซึ่งตัวแปรอาร์กิวเมนต์และตัวแปรพารามิเตอร์จะต้องมีความสัมพันธ์กัน มิฉะนั้นอาจจะเกิดข้อผิดพลาดได้
ซึ่งในการส่งผ่านค่าตัวแปร จะมีอยู่ 2 รูปแบบ คือ
Pass by Valueและ Pass by Reference
1. Pass
by Value (ByVal) เป็นการส่งผ่านค่าโดยจะคัดลอกค่าที่จะผ่าน
จากนั้นจึงส่งให้โปรแกรมย่อยที่ต้องการ แม้ว่าตัวแปรพารามิเตอร์ภายในโปรแกรมย่อยมีการเปลี่ยนแปลงค่าก็จะไม่มีผลใด
ๆต่อค่าของตัวแปรที่ส่งอาร์กิวเมนต์ซึ่งอยู่ภายนอกโปรแกรมย่อยนั้น ในการส่งผ่านค่าแบบ
Pass by Value นี้เป็นค่าปริยาย เมื่อมีการประกาศรายการตัวแปรพารามิเตอร์ในเมธอด
|1| Sub Hello(ByVal prmName As
String)
|2|
|3| End Sub
2. Pass
by Reference (ByRef) เป็นการผ่านค่าโดยการระบุตำแหน่งในหน่วยความจำที่เก็บค่าที่จะผ่านนั้นไว้
เพราะฉะนั้นถ้าตัวแปรพารามิเตอร์ภายในโปรแกรมย่อยมีการเปลี่ยน แปลงค่าที่ผ่านไปให้
ย่อมส่งผลโดยตรงของค่าที่ผ่านซึ่งอยู่ภายนอกโปรแกรมย่อยนั้น
|1| Sub Hello(ByRef prmName As
String)
|2|
|3| End Sub
จากการส่งผ่านค่าทั้งสองแบบที่ผ่านมา หากยังไม่สามารถทำความเข้าใจขอให้ทดลองจากตัวอย่างด้านล่างนี้
เพื่อให้เกิดความเข้าใจมากยิ่งขึ้น
ตัวอย่างที่
1 การเขียนโปรแกรมเพื่อทดสอบการส่งผ่านค่าแบบ Pass by Value
(1)
ออกแบบฟอร์มดังนี้ โดยนำ TextBox และ Button มาวางลงบนฟอร์ม
(2) จากนั้นเขียนโปรแกรมโดยสร้างเมธอด
Hello() และเขียนเหตุการณ์ในตัวควบคุม Button1 เมื่อมีการคลิกที่ปุ่ม ดังต่อไปนี้
|1| Public Class Form1
|2| Private Sub Button1_Click()
Handles Button1.Click
|3| Hello(TextBox1.Text)
|4| End Sub
|5|
'------------------------------------------
|6| Sub Hello(ByVal prmName As String)
|7| prmName = "ยินดีต้อนรับคุณ:" & prmName & "เข้าสู่มหาวิทยาลัยราชภัฏเลย"
|8| MsgBox(prmName)
|9| End Sub
|10| End Class
(3) เมื่อเขียนโค้ดเสร็จแล้วให้กดปุ่ม
F5 เพื่อรันโปรแกรมและป้อนค่าข้อมูลชื่อลงในช่อง TextBox
ดังภาพจากนั้นกดปุ่ม Pass by จะพบกล่องข้อความต้อนรับ
ดังภาพ
(4) โปรดสังเกตเมื่อกดปุ่ม Pass
by แล้ว ข้อความในช่อง TextBox ยังคงเป็นข้อความเดิม
มาถึงจุดนี้นักศึกษาอย่างพึ่งสับสนว่า
การแสดงผลดังกล่าวนั้นก็เป็นการแสดงผลโดยปกติของการเขียนโปรแกรมที่มีการส่งผ่านค่า
แต่ให้เข้าใจไว้ก่อนว่าค่าในตัวแปรจะมีการ Copy ไปยังการส่งผ่านค่า
ดังนั้นเพื่อให้เกิดความเข้าใจมากขึ้นให้นักศึกษาลองสังเกตตัวอย่าง ต่อไปนี้จะเรื่องของการส่งผ่านค่าตัวแปรแบบ
Pass by Reference
ความคิดเห็น
แสดงความคิดเห็น