Cara: Melindungi Argumen Prosedur Terhadap Perubahan Nilai (Visual Basic)
Jika prosedur mendeklarasikan parameter sebagai ByRef, Visual Basic memberi kode prosedur referensi langsung ke elemen pemrograman yang mendasari 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 seperti itu.
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 berdasarkan nilai, atau tidak mengapitnya dalam tanda kurung untuk meneruskannya dengan referensi. Untuk informasi selengkapnya, lihat Cara: Memaksa Argumen untuk Diteruskan oleh Nilai.
Contoh
Contoh berikut menentukan dua prosedur yang mengambil variabel array berdasarkan nilai dan beroperasi pada elemennya. Prosedur increase
hanya menambah satu ke setiap elemen. Prosedur replace
menetapkan array baru ke parameter a()
lalu menambahkannya ke setiap elemen. Namun, penetapan ulang tidak memengaruhi variabel larik yang mendasarinya 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(n): 11, 21, 31, 41". Karena array n
adalah jenis referensi, increase
dapat mengubah anggotanya, meskipun mekanisme passing adalah ByVal
.
Panggilan MsgBox
kedua menampilkan "Setelah mengganti(n): 11, 21, 31, 41". Karena n
diteruskan ByVal
, replace
tidak dapat mengubah variabel n
dengan menetapkan array baru ke dalamnya. Saat replace
membuat instans array baru k
dan menetapkannya ke variabel lokal a
, ini kehilangan referensi ke n
yang diteruskan oleh kode panggilan. Saat menaikkan anggota a
, hanya array lokal k
yang terpengaruh. Oleh karena itu, replace
tidak meningkatkan nilai array n
dalam kode panggilan.
Mengkompilasi kode
Default dalam Visual Basic adalah meneruskan argumen menurut nilai. Namun, merupakan 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 Meneruskan Argumen Berdasarkan Nilai dan Berdasarkan Referensi
- Cara: Mengubah Nilai Argumen Prosedur
- Cara: Memaksa Argumen untuk Diteruskan berdasarkan Nilai
- Meneruskan Argumen menurut Posisi dan Berdasarkan Nama
- Jenis Nilai dan Jenis Referensi
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk