Kata kunci Tidak ada (Visual Basic)
Mewakili nilai default dari semua jenis data. Untuk jenis referensi, nilai default-nya adalah referensi null
. Untuk jenis nilai, nilai default bergantung pada apakah jenis nilai dapat diubah ke null.
Catatan
Untuk jenis nilai yang tidak dapat diubah ke null, Nothing
di Visual Basic berbeda dari null
di C#. Di Visual Basic, jika Anda mengatur variabel jenis nilai yang tidak dapat diubah ke null ke Nothing
, variabel diatur ke nilai default untuk jenis yang dideklarasikan. Di C#, jika Anda menetapkan variabel jenis nilai yang tidak dapat diubah ke null ke null
, kesalahan waktu kompilasi terjadi.
Keterangan
Nothing
mewakili nilai default dari jenis data. Nilai default tergantung pada apakah variabel adalah jenis nilai atau jenis referensi.
Variabel jenis nilai secara langsung berisi nilainya. Jenis nilai mencakup semua jenis data numerik, Boolean
, Char
, Date
, semua struktur, dan semua enumerasi. Variabel jenis referensi menyimpan referensi ke instans objek dalam memori. Jenis referensi mencakup kelas, larik, delegasi, dan string. Untuk informasi selengkapnya, lihat Jenis Nilai dan Jenis Referensi.
Jika variabel adalah jenis nilai, perilaku Nothing
bergantung pada apakah variabel adalah jenis data yang dapat diubah ke null. Untuk mewakili jenis nilai yang dapat diubah ke null, tambahkan pengubah ?
ke nama jenis. Menetapkan Nothing
ke variabel yang dapat diubah ke null akan mengatur nilai ke null
. Untuk informasi dan contoh selengkapnya, lihat Jenis Nilai yang Dapat Diubah ke Null.
Jika variabel adalah jenis nilai yang tidak dapat diubah ke null, menetapkan Nothing
ke variabel akan mengaturnya ke nilai default untuk jenis yang dideklarasikan. Jika jenis tersebut berisi anggota variabel, semuanya diatur ke nilai default. Contoh berikut menggambarkan hal ini untuk jenis skalar.
Module Module1
Sub Main()
Dim ts As TestStruct
Dim i As Integer
Dim b As Boolean
' The following statement sets ts.Name to null and ts.Number to 0.
ts = Nothing
' The following statements set i to 0 and b to False.
i = Nothing
b = Nothing
Console.WriteLine($"ts.Name: {ts.Name}")
Console.WriteLine($"ts.Number: {ts.Number}")
Console.WriteLine($"i: {i}")
Console.WriteLine($"b: {b}")
Console.ReadKey()
End Sub
Public Structure TestStruct
Public Name As String
Public Number As Integer
End Structure
End Module
Jika variabel adalah jenis referensi, menetapkan Nothing
ke variabel akan mengaturnya ke referensi null
dari jenis variabel. Variabel yang diatur ke referensi null
tidak terkait dengan objek apa pun. Contoh berikut menunjukkan hal berikut:
Module Module1
Sub Main()
Dim testObject As Object
' The following statement sets testObject so that it does not refer to
' any instance.
testObject = Nothing
Dim tc As New TestClass
tc = Nothing
' The fields of tc cannot be accessed. The following statement causes
' a NullReferenceException at run time. (Compare to the assignment of
' Nothing to structure ts in the previous example.)
'Console.WriteLine(tc.Field1)
End Sub
Class TestClass
Public Field1 As Integer
' . . .
End Class
End Module
Untuk memeriksa apakah variabel referensi (atau jenis nilai nullable) adalah null
, selalu gunakan Is Nothing
atau IsNot Nothing
. Jangan gunakan = Nothing
atau <> Nothing
.
Untuk string di Visual Basic, string kosong sama dengan Nothing
. Oleh karena itu, "" = Nothing
benar. Fakta ini membuatnya sangat penting bahwa Anda memilih perbandingan yang benar ketika Anda bekerja dengan string. Meskipun myString = Nothing
dan myString <> Nothing
menunjukkan apakah nilai yang tidak kosong ditetapkan, kami sangat menyarankan penggunaan String.IsNullOrEmpty(myString)
untuk tujuan ini. Gunakan Is Nothing
dan IsNot Nothing
untuk menentukan apakah ada nilai, termasuk string kosong, telah diatur.
Contoh berikut menunjukkan perbandingan yang menggunakan operator Is
dan IsNot
:
Module Module1
Sub Main()
Dim testObject As Object
testObject = Nothing
Console.WriteLine(testObject Is Nothing)
' Output: True
Dim tc As New TestClass
tc = Nothing
Console.WriteLine(tc IsNot Nothing)
' Output: False
' Declare a nullable value type.
Dim n? As Integer
Console.WriteLine(n Is Nothing)
' Output: True
n = 4
Console.WriteLine(n Is Nothing)
' Output: False
n = Nothing
Console.WriteLine(n IsNot Nothing)
' Output: False
Console.ReadKey()
End Sub
Class TestClass
Public Field1 As Integer
Private field2 As Boolean
End Class
End Module
Jika Anda mendeklarasikan variabel tanpa menggunakan klausul As
dan mengaturnya ke Nothing
, variabel memiliki jenis Object
. Contohnya adalah Dim something = Nothing
. Kesalahan waktu kompilasi terjadi dalam kasus ini ketika Option Strict
aktif dan Option Infer
nonaktif.
Saat Anda menetapkan Nothing
ke variabel objek, variabel itu tidak lagi merujuk ke instans objek apa pun. Jika variabel sebelumnya merujuk ke instans, mengaturnya ke Nothing
tidak akan menghentikan instans itu sendiri. Instans dihentikan, dan memori serta sumber daya sistem yang terkait dengannya dilepaskan, hanya setelah pengumpul sampah (GC) mendeteksi bahwa tidak ada referensi aktif yang tersisa.
Nothing
berbeda dari objek DBNull, yang mewakili varian yang batal diinisialisasi atau kolom database yang tidak ada.