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.
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.