บทที่ 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


ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report

บทที่ 6 กระบวนการพอลิมอร์ฟิซึม (Polymorphism)

บทที่ 11 ตอน 3 การออกแบบรายงานด้วย Crystal Report Ex2