Bagikan melalui


Cara: Mengubah Nilai Argumen Prosedur (Visual Basic)

Saat Anda memanggil prosedur, setiap argumen yang Anda berikan sesuai dengan salah satu parameter yang ditentukan dalam prosedur. Dalam beberapa kasus, kode prosedur dapat mengubah nilai yang mendasar argumen dalam kode panggilan. Dalam kasus lain, prosedur hanya dapat mengubah salinan lokal argumen.

Saat Anda memanggil prosedur, Visual Basic membuat salinan lokal dari setiap argumen yang diteruskan ByVal. Untuk setiap argumen yang diteruskan ByRef, Visual Basic memberi kode prosedur referensi langsung ke elemen pemrograman yang mendasari argumen yang diberikan dalam kode pemanggilan.

Jika elemen yang mendasar dalam kode panggilan adalah elemen yang dapat dimodifikasi dan argumen diteruskan ByRef, kode prosedur dapat menggunakan referensi langsung untuk mengubah nilai elemen dalam kode panggilan.

Mengubah Nilai Yang Mendasar

Untuk mengubah nilai yang mendasar dari argumen prosedur dalam kode panggilan

  1. Dalam deklarasi prosedur, tentukan ByRef untuk parameter yang sesuai dengan argumen.

  2. Dalam kode panggilan, berikan elemen pemrograman yang dapat dimodifikasi sebagai argumen.

  3. Dalam kode panggilan, jangan sertakan argumen dalam tanda kurung dalam daftar argumen.

  4. Dalam kode prosedur, gunakan nama parameter untuk menetapkan nilai ke elemen yang mendasar dalam kode panggilan.

Lihat contoh lebih lanjut untuk demonstrasi.

Mengubah Salinan Lokal

Jika elemen yang mendasar dalam kode panggilan adalah elemen yang tidak dapat dimodifikasi, atau jika argumen diteruskan ByVal, prosedur tidak dapat mengubah nilainya dalam kode panggilan. Namun, prosedur dapat mengubah salinan lokal argumen tersebut.

Untuk mengubah salinan argumen prosedur dalam kode prosedur

  1. Dalam deklarasi prosedur, tentukan ByVal untuk parameter yang sesuai dengan argumen.

    -atau-

    Dalam kode panggilan, sertakan argumen dalam tanda kurung dalam daftar argumen. Ini memaksa Visual Basic untuk meneruskan argumen menurut nilai, bahkan jika parameter yang sesuai menentukan ByRef.

  2. Dalam kode prosedur, gunakan nama parameter untuk menetapkan nilai ke salinan lokal argumen. Nilai yang mendasar dalam kode panggilan tidak diubah.

Contoh

Contoh berikut menunjukkan dua prosedur yang mengambil variabel array dan beroperasi pada elemennya. Prosedur increase ini dengan sederhana menambahkan satu ke setiap elemen. Prosedur menetapkan replace array baru ke parameter a() lalu menambahkannya ke setiap elemen.

Public Sub increase(ByVal a() As Long)
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Public Sub replace(ByRef a() As Long)
    Dim k() As Long = {100, 200, 300}
    a = k
    For j As Integer = 0 To UBound(a)
        a(j) = a(j) + 1
    Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " & 
    CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))

Panggilan pertama MsgBox menampilkan "Setelah peningkatan nilai n: 11, 21, 31, 41". Karena array n adalah jenis referensi, replace dapat mengubah anggotanya, meskipun mekanisme passing adalah ByVal.

Panggilan kedua MsgBox menampilkan "Setelah mengganti(n): 101, 201, 301". Karena n diteruskan ByRef, replace dapat memodifikasi variabel n dalam kode panggilan dan menetapkan array baru ke dalamnya. Karena n merupakan jenis referensi, replace juga dapat mengubah anggotanya.

Anda dapat mencegah prosedur memodifikasi variabel itu sendiri dalam kode panggilan. Lihat Cara: Melindungi Argumen Prosedur Terhadap Perubahan Nilai.

Mengkompilasi kode

Saat Anda meneruskan variabel berdasarkan referensi, Anda harus menggunakan ByRef kata kunci untuk menentukan mekanisme ini.

Default dalam Visual Basic adalah meneruskan argumen berdasarkan nilai. Namun, adalah praktik pemrograman yang baik untuk menyertakan kata kunci ByVal atau ByRef dengan setiap parameter yang dideklarasikan. Ini membuat kode Anda lebih mudah dibaca.

Keamanan .NET Framework

Selalu ada potensi risiko dalam memungkinkan prosedur untuk mengubah nilai yang mendasar argumen dalam kode panggilan. Pastikan Anda mengharapkan nilai ini diubah, dan bersiaplah untuk memeriksa validitas sebelum menggunakannya.

Lihat juga