Bagikan melalui


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.

Lihat juga