Nattawut Phetmak
Jack of all Trades
การทำงานย่อยใน Visual Basic สามารถแบ่งได้เป็น 2 อย่างคือ Function
และ Sub
ความแตกต่างคือ Function
เป็นการทำงานย่อยที่ (ควรจะ) ส่งค่าแบบ ByVal
(ส่งค่าของตัวแปรเข้าไป ถ้ามีการเปลี่ยนค่าระหว่างทำงาน ตัวแปรต้นทางจะไม่เปลี่ยน) และเมื่อทำงานเสร็จเรียบร้อยก็ (ควรจะ) ส่งค่าคืนกลับมา เช่น
Private Function square(ByVal x As Integer) As Integer
Return x * x
End Function
หรือถ้าจะแหกฎนั้น
Private Function square(ByVal x As Integer, ByRef answer As Integer)
answer = x * x
Return Nothing
End Function
สังเกตว่าต้องมีการคืนค่าเสมอนะครับ (แม้จะเขียนโดยที่ไม่ให้คืนค่าก็ตาม)
ส่วนการใช้ Sub
จะถูกมองคล้ายๆ การแยกส่วนของ code ออกเป็นหลายๆ ส่วน ตัวแปรส่วนใหญ่ส่งเข้าไปแบบ ByRef
(เมื่อเปลี่ยนค่าตัวแปร ตัวแปรที่ต้นทางจะเปลี่ยนด้วย) และเมื่อทำงานเสร็จจะไม่มีการคืนค่าครับ
Private Sub square(ByRef x As Integer, ByRef answer As Integer)
answer = x * x
End Sub
ความแตกต่างอีกอย่างคือการที่ Sub
สามารถ Handles
เหตุการณ์ต่างๆ เช่นการคลิกเมาส์ได้ โดยเปลี่ยนไปส่งผ่านตัวแปรที่เกี่ยวกับ event 2 ตัวแทน (ซึ่งจะเหมือนกับการดับเบิลคลิกเข้าไปเขียน code) ดังนี้
Private Sub testSquare(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click
Dim x As Integer = 5
MessageBox.Show(x * x)
End Sub
(อันที่จริงแล้ว Function
ก็ Handles
ได้ แต่มักไม่ทำกัน เพราะผิด concept)
สรุปคือตัดสินใจจากสถานการณ์นั้นๆ ว่าจะใช้ Function
(มีการคืนค่า) หรือจะใช้ Sub
(จัดระเบียบ code, อิงกับ event ภายนอก) ให้เหมาะกับงานด้วยนะครับ