Visual Basic การผ่านค่า array ไปยัง function
หลังจากที่หายไปเกือบเดือนเพราะมีแต่เรื่องยุ่งๆก็เลยไม่ว่างที่จะเขียนบทความมาถึงอาทิตย์นี้เลยนั่งพักเหนื่อยเลยมาเขียนบทความดีกว่า บทความครั้งที่แล้วพูดถึง array ใน vb ครั้งนี้ก็มาต่อกันต่อกับ array แต่คราวนี้เป็นการ pass ค่ายัง function เพื่อที่เราจะได้เขียนโปรแกรมแยกการทำงานเพื่องานต่อการเขียนโปรแกรมและแยกการทำงานเป็นส่วนๆๆนั้นเอง เริ่มแรกก็ให้เปิดโปรแกรมจากบทความครั้งที่แล้วในเรื่อง
ตัวแปร array ใน visual basic แล้วให้ทำการแก้ไขดังนี้ ทำการเพิ่มปุ่มโดยกำหนด name เป็น btnPassRef
แล้ว text เป็น Pass Ref. ดังรูป
หลังจากนั้นให้ double click ที่ form เพื่อเขียน sub function เพิ่ม 2 อันคือ AddArrayItem กับ ArrayRefItem โค้ดดังนี้
Private Sub AddArrayItem(ByVal arrayList() As String) For Each Web As String In arrayList lstWeb.Items.Add(Web) Next End Sub Private Sub ArrayRefItem(ByRef arrayList() As String) arrayList(4) = "www.facebook.com" End Sub
เมื่อเขียน sub function ทั้ง 2 เสร็จแล้วก็ให้ double click ที่ ปุ่ม Do Array เพื่อทำการแก้ไขโค้ดของครั้งก่อนโดยมีรายละเอียดดังนี้
Private Sub cmdDoArray_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDoArray.Click Dim strWeb(4) As String ClearList() strWeb(0) = "www.google.com" strWeb(1) = "www.thaicoding.net" strWeb(2) = "www.hotmail.com" strWeb(3) = "www.sanook.com" strWeb(4) = "www.yahoo.com" AddArrayItem(strWeb) End Sub
เมื่อแก้ไขโค้ดเสร็จแล้วก็ให้ double click ที่ปุ่ม Pass Ref. ?เพื่อทำการเขียนโค้ดดังนี้
Private Sub btnPassRef_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPassRef.Click Dim strWeb(4) As String ClearList() strWeb(0) = "www.google.com" strWeb(1) = "www.thaicoding.net" strWeb(2) = "www.hotmail.com" strWeb(3) = "www.sanook.com" strWeb(4) = "www.yahoo.com" ArrayRefItem(strWeb) AddArrayItem(strWeb) End Sub
เมื่อเขียนโค้ดเสร็จหมดแล้วก็ลองกด F5 เพื่อรันดูก็จะได้ดังนี้
เมื่อกดปุ่ม Do Array
เมื่อกดปุ่ม Pass Ref.
จากการรันสังเกตว่าความต่างของ 2 ปุ่มเมื่อกดคือชื่อเว็บใน list อันสุดท้ายจะต่างกัน ซึ่งเมื่อไปดูในโค้ดแล้วก็ต่างกันตรงที่ การทำงานของปุ่ม Pass Ref. มีการเรียกใช้? ArrayRefItem(strWeb) ก่อนการใช้งาน ?AddArrayItem(strWeb) นั้นเองซึ่งการทำงานของ sub function ทั้ง 2 นั้นจะแตกต่างกันตรงที่การ pass ค่าซึ่งในการ pass ค่าไปยัง function นั้น มี 2 แบบ คือการ pass by value กับ pass by refence โดยที่การ pass by value นั้น เป็นเพียงการ copy ค่าสงไปเท่านั้นแต่ pass by refence เป็นการส่งไปทั้งตัวเลยนั้นก็หมายความว่า
pass by value นั้นส่งค่าไปยัง function ใน function นั้นจะมีการแก้ค่าอะไรก็จะไม่เปลี่ยนค่าเดิมแต่ pass by refence นั้นเมื่อส่งไปยัง function หากมีการแก้ไขค่าก็จะกระทบต่อค่าเดิมเหมือนกับในตัวอย่างที่เปลี่ยน strWeb(4) = www.yahoo.com เป็น www.facebook.com นั้นเองซึ่งก็จะทำให้ผลออกมาดังที่โปรแกรมแสดงออกมา ซึ่งใน vb นั้นมีการระบุว่าเป็นการ pass ค่าแบบไหนตรงที่
Private Sub AddArrayItem(ByVal arrayList() As String)
Private Sub ArrayRefItem(ByRef arrayList() As String)
จะเห็นความต่างตรงคำ By Val กับ By Ref นั้นเอง
Tags: array, array function, vb, Visual Basic, สอน vb, สอน visual basic


