Function

การทำงานย่อยใน 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 ภายนอก) ให้เหมาะกับงานด้วยนะครับ

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus