Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jika prosedur mendeklarasikan parameter sebagai ByRef, Visual Basic memberi kode prosedur referensi langsung ke elemen pemrograman yang mendasar argumen dalam kode panggilan. Ini memungkinkan prosedur untuk mengubah nilai yang mendasar argumen dalam kode panggilan. Dalam beberapa kasus, kode panggilan mungkin ingin melindungi dari perubahan tersebut.
Anda selalu dapat melindungi argumen dari perubahan dengan mendeklarasikan parameter terkait ByVal dalam prosedur. Jika Anda ingin dapat mengubah argumen tertentu dalam beberapa kasus tetapi bukan yang lain, Anda dapat mendeklarasikannya ByRef dan membiarkan kode panggilan menentukan mekanisme passing di setiap panggilan. Ini dilakukan dengan menyertakan argumen yang sesuai dalam tanda kurung untuk meneruskannya melalui nilai, atau tidak menyertakannya dalam tanda kurung untuk meneruskannya melalui referensi. Untuk informasi selengkapnya, lihat Cara: Memaksa Argumen untuk Diteruskan berdasarkan Nilai.
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. Namun, penetapan ulang tidak memengaruhi variabel array yang mendasar dalam kode panggilan.
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(ByVal 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, increase dapat mengubah anggotanya, meskipun mekanisme passing adalah ByVal.
Panggilan kedua MsgBox menampilkan "Setelah mengganti(n): 11, 21, 31, 41". Karena n diteruskan ByVal, replace tidak dapat mengubah variabel n dalam kode panggilan dengan menetapkan array baru ke dalamnya. Saat replace membuat instance array baru k dan menetapkannya ke variabel lokal a, kode kehilangan referensi ke n yang diteruskan oleh kode pemanggil. Ketika mengubah anggota a, hanya array k lokal yang terpengaruh. Oleh karena itu, replace tidak meningkatkan nilai array n dalam kode panggilan.
Mengkompilasi kode
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.
Lihat juga
- Prosedur
- Parameter prosedur dan Argumen
- Cara: Meneruskan Argumen ke Prosedur
- Meneruskan Argumen menurut Nilai dan berdasarkan Referensi
- Perbedaan Antara Argumen yang Dapat Dimodifikasi dan Tidak Dapat Dimodifikasi
- Perbedaan Antara Pengiriman Argumen Berdasarkan Nilai dan Referensi
- Cara: Mengubah Nilai Argumen Prosedur
- Cara: Memaksa Argumen untuk Diteruskan sebagai Nilai
- Meneruskan Argumen menurut Posisi dan berdasarkan Nama
- Jenis Nilai dan Tipe Referensi