Bagikan melalui


Jenis Nilai Yang Dapat Diubah Ke null (Visual Basic)

Terkadang Anda bekerja dengan jenis nilai yang tidak memiliki nilai yang ditentukan dalam keadaan tertentu. Misalnya, bidang dalam database mungkin harus membedakan antara memiliki nilai yang ditetapkan yang bermakna dan tidak memiliki nilai yang ditetapkan. Jenis nilai dapat diperluas untuk mengambil nilai normalnya atau nilai null. Ekstensi semacam itu disebut jenis nullable.

Setiap jenis nilai nullable dibangun dari struktur generik Nullable<T> . Pertimbangkan database yang melacak aktivitas terkait pekerjaan. Contoh berikut membuat jenis nullable Boolean dan mendeklarasikan variabel dari jenis tersebut. Anda dapat menulis deklarasi dengan tiga cara:

Dim ridesBusToWork1? As Boolean
Dim ridesBusToWork2 As Boolean?
Dim ridesBusToWork3 As Nullable(Of Boolean)

Variabel ridesBusToWork dapat menampung nilai True, nilai False, atau tidak ada nilai sama sekali. Nilai default awalnya tidak ada nilai sama sekali, yang dalam hal ini dapat berarti bahwa informasi belum diperoleh untuk orang ini. Sebaliknya, False dapat berarti bahwa informasi telah diperoleh dan orang tersebut tidak naik bus untuk bekerja.

Anda dapat mendeklarasikan variabel dan properti dengan jenis nilai nullable, dan Anda dapat mendeklarasikan array dengan elemen dari jenis nilai nullable. Anda dapat mendeklarasikan prosedur dengan jenis nilai nullable sebagai parameter, dan Anda dapat mengembalikan jenis nilai nullable dari prosedur Function.

Anda tidak dapat membuat jenis nullable pada jenis referensi seperti array, String, atau kelas. Tipe yang mendasar harus merupakan tipe nilai. Untuk informasi selengkapnya, lihat Jenis Nilai dan Jenis Referensi.

Menggunakan Variabel Tipe Nullable

Anggota terpenting dari nilai bertipe nullable adalah properti HasValue dan Value. Untuk variabel jenis nilai yang dapat diubah ke null, HasValue memberi tahu Anda apakah variabel berisi nilai yang ditentukan. Jika HasValue adalah True, Anda dapat membaca nilai dari Value. Perhatikan bahwa keduanya HasValue dan Value merupakan ReadOnly properti.

Nilai Default

Ketika Anda mendeklarasikan variabel dengan jenis nilai nullable, propertinya HasValue memiliki nilai default .False Ini berarti bahwa secara default, variabel tidak memiliki nilai yang terdefinisi, melainkan nilai default dari jenis nilai mendasar yang dimilikinya. Dalam contoh berikut, variabel numberOfChildren awalnya tidak memiliki nilai yang ditentukan, meskipun nilai default jenisnya Integer adalah 0.

Dim numberOfChildren? As Integer

Nilai null berguna untuk menunjukkan nilai yang tidak ditentukan atau tidak diketahui. Jika numberOfChildren telah dinyatakan sebagai Integer, tidak akan ada nilai yang dapat menunjukkan bahwa informasi saat ini tidak tersedia.

Menyimpan Nilai

Anda menyimpan nilai dalam variabel atau properti dari jenis nilai nullable dengan cara yang khas. Contoh berikut menetapkan nilai ke variabel numberOfChildren yang dideklarasikan dalam contoh sebelumnya.

numberOfChildren = 2

Jika variabel atau properti dari jenis nilai nullable berisi nilai yang ditentukan, Anda dapat menyebabkannya kembali ke status awal tidak memiliki nilai yang ditetapkan. Anda melakukan ini dengan mengatur variabel atau properti ke Nothing, seperti yang ditunjukkan contoh berikut.

numberOfChildren = Nothing

Nota

Meskipun Anda dapat menetapkan Nothing ke variabel tipe nilai yang dapat bernilai null, Anda tidak dapat mengujinya untuk Nothing dengan menggunakan tanda sama dengan. Perbandingan yang menggunakan tanda sama dengan, someVar = Nothing, selalu dievaluasi sebagai Nothing. Anda dapat menguji properti variabel HasValue untuk False, atau menguji dengan menggunakan Is operator atau IsNot .

Memperoleh Nilai

Untuk mengambil nilai variabel dari jenis nilai yang dapat diubah ke null, Anda harus terlebih dahulu menguji propertinya HasValue untuk mengonfirmasi bahwa variabel tersebut memiliki nilai. Jika Anda mencoba membaca nilai ketika HasValue adalah False, Visual Basic melemparkan InvalidOperationException pengecualian. Contoh berikut menunjukkan cara yang disarankan untuk membaca variabel numberOfChildren contoh sebelumnya.

If numberOfChildren.HasValue Then
    MsgBox("There are " & CStr(numberOfChildren) & " children.")
Else
    MsgBox("It is not known how many children there are.")
End If

Membandingkan Tipe Nullable

Ketika variabel nullable Boolean digunakan dalam ekspresi Boolean, hasilnya dapat berupa True, False, atau Nothing. Berikut ini adalah tabel kebenaran untuk And dan Or. Karena b1 dan b2 sekarang memiliki tiga nilai yang mungkin, ada sembilan kombinasi untuk dievaluasi.

b1 b2 b1 Dan b2 b1 Atau b2
Nothing Nothing Nothing Nothing
Nothing True Nothing True
Nothing False False Nothing
True Nothing Nothing True
True True True True
True False False True
False Nothing False Nothing
False True False True
False False False False

Ketika nilai variabel atau ekspresi Boolean adalah Nothing, itu bukan true atau false. Pertimbangkan contoh berikut.

Dim b1? As Boolean
Dim b2? As Boolean
b1 = True
b2 = Nothing

' The following If statement displays "Expression is not true".
If (b1 And b2) Then
    Console.WriteLine("Expression is true")
Else
    Console.WriteLine("Expression is not true")
End If

' The following If statement displays "Expression is not false".
If Not (b1 And b2) Then
    Console.WriteLine("Expression is false")
Else
    Console.WriteLine("Expression is not false")
End If

Dalam contoh ini, b1 And b2 diartikan sebagai Nothing. Akibatnya, Else klausul dijalankan dalam setiap If pernyataan, dan outputnya adalah sebagai berikut:

Expression is not true

Expression is not false

Nota

AndAlso dan OrElse, yang menggunakan evaluasi pendek, harus mengevaluasi operand kedua mereka ketika operand pertama bernilai Nothing.

Propagasi

Jika salah satu atau kedua operan dari operasi aritmatika, perbandingan, pergeseran, atau tipe bertipe data bernilai nol, hasil operasi juga merupakan tipe data bernilai nol. Jika kedua operand memiliki nilai yang bukan Nothing, operasi dilakukan pada nilai yang mendasar dari operand, seolah-olah tidak ada jenis nilai yang dapat diubah ke null. Dalam contoh berikut, variabel compare1 dan sum1 ditulis secara implisit. Jika Anda mengarahkan penunjuk mouse ke atasnya, Anda akan melihat bahwa pengkompilasi menyimpulkan jenis nilai nullable untuk keduanya.

' Variable n is a nullable type, but both m and n have proper values.
Dim m As Integer = 3
Dim n? As Integer = 2

' The comparison evaluated is 3 > 2, but compare1 is inferred to be of 
' type Boolean?.
Dim compare1 = m > n
' The values summed are 3 and 2, but sum1 is inferred to be of type Integer?.
Dim sum1 = m + n

' The following line displays: 3 * 2 * 5 * True
Console.WriteLine($"{m} * {n} * {sum1} * {compare1}")

Jika satu atau kedua operand memiliki nilai Nothing, hasilnya adalah Nothing.

' Change the value of n to Nothing.
n = Nothing

Dim compare2 = m > n
Dim sum2 = m + n

' Because the values of n, compare2, and sum2 are all Nothing, the
' following line displays: 3 * <null> * <null> * <null>
Console.WriteLine($"{m} * {If(n, "<null>")} * {If(sum2, "<null>")} * {If(compare2, "<null>")}")

Menggunakan Tipe Nullable dengan Data

Database adalah salah satu tempat terpenting untuk menggunakan jenis nilai nullable. Tidak semua objek database saat ini mendukung jenis nilai nullable, tetapi adaptor tabel yang dihasilkan perancang melakukannya. Lihat Dukungan TableAdapter untuk jenis bernilai null.

Lihat juga