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 normal atau nilai null. Ekstensi semacam itu disebut jenis yang dapat diubah ke null/nullable.
Setiap jenis nilai yang dapat diubah ke null 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 menyimpan nilai True
, nilai False
, atau tanpa nilai sama sekali. Nilai default awalnya tidak ada nilai sama sekali, yang dalam hal ini bisa berarti bahwa informasi belum diperoleh untuk orang ini. Sebaliknya, False
bisa berarti bahwa informasi telah diperoleh dan orang tersebut tidak naik bus untuk bekerja.
Anda dapat mendeklarasikan variabel dan properti dengan jenis nilai yang dapat diubah ke null, dan Anda dapat mendeklarasikan array dengan elemen 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 yang dapat diubah ke null pada jenis referensi seperti array, String
, atau kelas. Jenis yang mendasar harus merupakan jenis nilai. Untuk informasi selengkapnya, lihat Jenis Nilai dan Jenis Referensi.
Menggunakan Variabel Tipe Nullable
Anggota terpenting dari jenis nilai yang dapat diubah ke null 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 HasValue dan Value merupakan properti ReadOnly
.
Nilai Default
Saat Anda mendeklarasikan variabel dengan jenis nilai nullable, properti HasValue memiliki nilai default False
. Ini berarti bahwa secara default variabel tidak memiliki nilai yang ditentukan, bukan nilai default dari jenis nilai yang mendasarnya. Dalam contoh berikut, variabel numberOfChildren
awalnya tidak memiliki nilai yang ditentukan, meskipun nilai default jenis 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
Catatan
Meskipun Anda dapat menetapkan Nothing
ke variabel jenis nilai nullable, Anda tidak dapat menguji Nothing
menggunakan tanda sama dengan. Perbandingan yang menggunakan tanda sama dengan, someVar = Nothing
, selalu mengevaluasi ke Nothing
. Anda dapat menguji properti variabel HasValue untuk False
, atau menguji dengan menggunakan operator Is
atau IsNot
.
Mengambil Nilai
Untuk mengambil nilai variabel dari jenis nilai yang dapat diubah ke null, Anda harus terlebih dahulu menguji properti HasValue untuk mengonfirmasi bahwa variabel tersebut memiliki nilai. Jika Anda mencoba membaca nilai saat HasValue adalah False
, Visual Basic melempar pengecualian InvalidOperationException. Contoh berikut menunjukkan cara yang disarankan untuk membaca variabel numberOfChildren
dari 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 Jenis Nullable
Saat 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 And b2 | b1 Or 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 |
Saat 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
mengevaluasi ke Nothing
. Akibatnya, Else
klausul dijalankan di setiap If
pernyataan, dan outputnya adalah sebagai berikut:
Expression is not true
Expression is not false
Catatan
AndAlso
dan OrElse
, yang menggunakan evaluasi sirkuit pendek, harus mengevaluasi operan kedua mereka saat pertama mengevaluasi ke Nothing
.
Propagasi
Jika salah satu atau kedua operan dari operasi aritmatika, perbandingan, pergeseran, atau jenis adalah jenis nilai yang dapat diubah ke null, hasil operasi juga merupakan jenis nilai yang dapat diubah ke null. Jika kedua operan 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
ditik secara implisit. Jika Anda mengarahkan penunjuk mouse ke atasnya, Anda akan melihat bahwa compiler menyimpulkan jenis nilai yang dapat diubah ke null 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 operan 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 Jenis Nullable dengan Data
Database adalah salah satu tempat terpenting untuk menggunakan jenis nilai yang dapat diubah ke null. Tidak semua objek database saat ini mendukung jenis nilai yang dapat diubah ke null, tetapi adaptor tabel yang dihasilkan perancang mendukungnya. Lihat Dukungan TableAdapter untuk jenis yang nullable.
Lihat juga
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