Visual Basic การผ่านค่า array ไปยัง function

หลังจากที่หายไปเกือบเดือนเพราะมีแต่เรื่องยุ่งๆก็เลยไม่ว่างที่จะเขียนบทความมาถึงอาทิตย์นี้เลยนั่งพักเหนื่อยเลยมาเขียนบทความดีกว่า บทความครั้งที่แล้วพูดถึง array ใน vb ครั้งนี้ก็มาต่อกันต่อกับ array แต่คราวนี้เป็นการ pass ค่ายัง function เพื่อที่เราจะได้เขียนโปรแกรมแยกการทำงานเพื่องานต่อการเขียนโปรแกรมและแยกการทำงานเป็นส่วนๆๆนั้นเอง เริ่มแรกก็ให้เปิดโปรแกรมจากบทความครั้งที่แล้วในเรื่อง

ตัวแปร array ใน visual basic แล้วให้ทำการแก้ไขดังนี้ ทำการเพิ่มปุ่มโดยกำหนด name เป็น btnPassRef

แล้ว text เป็น Pass Ref. ดังรูป

vb, visual basic , array, array function, สอน vb,สอน visual basic

หลังจากนั้นให้ double click ที่ form เพื่อเขียน sub function เพิ่ม 2 อันคือ AddArrayItem กับ ArrayRefItem โค้ดดังนี้

[sourcecode language=”vb”]

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

[/sourcecode]

เมื่อเขียน sub function ทั้ง 2 เสร็จแล้วก็ให้ double click ที่ ปุ่ม Do Array เพื่อทำการแก้ไขโค้ดของครั้งก่อนโดยมีรายละเอียดดังนี้

[sourcecode language=”vb”]

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

[/sourcecode]

เมื่อแก้ไขโค้ดเสร็จแล้วก็ให้ double click ที่ปุ่ม Pass Ref. ?เพื่อทำการเขียนโค้ดดังนี้

[sourcecode language=”vb”]

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

[/sourcecode]

เมื่อเขียนโค้ดเสร็จหมดแล้วก็ลองกด F5 เพื่อรันดูก็จะได้ดังนี้

vb, visual basic , array, array function, สอน vb,สอน visual basic

เมื่อกดปุ่ม Do Array

vb, visual basic , array, array function, สอน vb,สอน visual basic

เมื่อกดปุ่ม 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 นั้นเอง

Download SourceCode

Leave a Reply

Your email address will not be published. Required fields are marked *