Operator menggabungkan nilai menjadi ekspresi, dan topik ini membahas tiga kelompok yang menjadi fondasi program VB.NET, yaitu operator aritmetika, operator perbandingan, serta operator logika AndAlso dan OrElse. Urutan pengerjaan operator juga dijelaskan karena menentukan hasil perhitungan pada ekspresi yang mencampur beberapa operator. Seluruh contoh pada topik ini berupa program utuh yang dijalankan, sehingga setiap perilaku disertai keluaran nyata.
Operator aritmetika#
Operator aritmetika menghitung nilai numerik, dan VB.NET menyediakan tujuh operator utama yang dirangkum pada tabel berikut.
| Operator | Kegunaan | Contoh | Hasil |
|---|---|---|---|
+ | Penjumlahan | 2 + 3 | 5 |
- | Pengurangan | 5 - 2 | 3 |
* | Perkalian | 4 * 3 | 12 |
/ | Pembagian pecahan | 7 / 2 | 3.5 |
\ | Pembagian bulat | 7 \ 2 | 3 |
Mod | Sisa pembagian | 7 Mod 2 | 1 |
^ | Pangkat | 2 ^ 10 | 1024 |
Program berikut menjalankan serangkaian perhitungan tersebut, termasuk dua perilaku yang menonjol, yaitu / yang selalu menghasilkan pecahan dan \ yang memotong bagian desimalnya.
Module Program
Sub Main()
Dim totalDetik As Integer = 100
Console.WriteLine(2 + 3 * 4)
Console.WriteLine((2 + 3) * 4)
Console.WriteLine(7 / 2)
Console.WriteLine(7 \ 2)
Console.WriteLine(totalDetik \ 60)
Console.WriteLine(totalDetik Mod 60)
Console.WriteLine(2 ^ 10)
Console.WriteLine(-2 ^ 2)
End Sub
End Module14
20
3.5
3
1
40
1024
-4Dua baris pertama sekaligus menunjukkan efek kurung terhadap urutan pengerjaan, sedangkan dua baris terakhir menunjukkan bahwa -2 ^ 2 menghasilkan -4 karena pangkat dikerjakan lebih dahulu daripada tanda negatif. Tanda - pada ekspresi itu sekaligus berperan sebagai tanda negatif, peran yang berbeda dari pengurangan dan dikupas pada urutan pengerjaan di bagian belakang.
Pembagian, pembagian bulat, dan sisa#
Tiga operator pembagian membedakan kebutuhan yang berbeda. Operator / menghasilkan Double dan mempertahankan bagian pecahan, operator \ memotong bagian pecahan sehingga hasilnya bilangan bulat, sedangkan Mod menyatakan sisa pembagian. Pasangan \ dan Mod berguna untuk mengurai satuan, misalnya mengubah 100 detik menjadi menit dan sisa detiknya, seperti pada baris totalDetik \ 60 dan totalDetik Mod 60 yang menghasilkan 1 menit dan 40 detik.
Pembagian dengan nol diperlakukan berbeda menurut tipenya, dan perbedaan ini terasa langsung pada jalannya program.
' tidak-dijalankan
Console.WriteLine(10 \ nol) ' nol bertipe Integer: DivideByZeroException saat dijalankanPembagian bulat dengan nol menghentikan program melalui exception dengan pesan Attempted to divide by zero., sedangkan pembagian pecahan dengan nol tidak melempar error dan menghasilkan Infinity atau -Infinity. Pembagi yang bersumber dari masukan pengguna atau perhitungan lain perlu diperiksa terlebih dahulu sebelum digunakan.
Operator perbandingan#
Operator perbandingan membandingkan dua nilai dan selalu menghasilkan Boolean, yaitu True atau False. Operatornya adalah = untuk kesamaan, <> untuk ketidaksamaan, serta <, >, <=, dan >= untuk urutan. Kelompok ini menjadi bahan utama percabangan dan perulangan, karena hasilnya langsung digunakan sebagai kondisi tanpa variabel perantara.
Module ContohPerbandingan
Sub Main()
Dim nilai As Integer = 75
Console.WriteLine(nilai >= 75)
Console.WriteLine(nilai <> 75)
Console.WriteLine("budi" = "Budi")
End Sub
End ModuleTrue
False
FalseBaris terakhir memperlihatkan perbandingan string, yaitu = membandingkan isi teksnya dan hasilnya peka huruf besar-kecil secara default. Tanda <= dan >= menyertakan batasnya, sehingga nilai >= 75 bernilai True tepat ketika nilai sama dengan 75. Perbandingan juga berlaku pada tipe lain yang memiliki urutan alami, misalnya dua nilai Date dibandingkan untuk menentukan mana yang lebih dahulu. Perbandingan string yang lebih rinci, termasuk cara mengabaikan perbedaan huruf, dibahas pada topik String.
Operator logika AndAlso dan OrElse#
AndAlso dan OrElse menggabungkan ekspresi Boolean dengan sifat short-circuit, yaitu ekspresi kedua tidak dievaluasi apabila hasilnya sudah ditentukan oleh ekspresi pertama. Sifat ini membuat pemeriksaan berantai menjadi aman, karena pemeriksaan yang berisiko error hanya dijalankan bila syaratnya terpenuhi.
Module ContohLogika
Sub Main()
Dim pembagi As Integer = 0
Console.WriteLine(pembagi <> 0 AndAlso 10 \ pembagi > 1)
Console.WriteLine(pembagi = 0 OrElse 10 \ pembagi > 1)
End Sub
End ModuleFalse
TruePada baris pertama, pembagi <> 0 bernilai False, sehingga 10 \ pembagi yang berisiko membagi dengan nol tidak pernah dieksekusi dan hasil akhirnya False. Pada baris kedua, pembagi = 0 bernilai True, sehingga OrElse langsung menyimpulkan True tanpa menyentuh ekspresi kedua. Kedua baris berjalan tanpa error justru karena sifat short-circuit tersebut.
Urutan pengerjaan#
Compiler mengerjakan operator mengikuti tingkat prioritas yang tetap, dari pangkat di urutan pertama sampai pergeseran bit di urutan terakhir kelompok aritmetika. Tabel berikut merangkum urutannya dari yang dikerjakan lebih dahulu.
| Urutan | Operator |
|---|---|
| 1 | ^ |
| 2 | + dan - unary |
| 3 | * dan / |
| 4 | \ |
| 5 | Mod |
| 6 | + dan - |
| 7 | & |
| 8 | << dan >> |
| 9 | Operator perbandingan =, <>, <, >, <=, >= |
| 10 | Not, lalu AndAlso/And, lalu OrElse/Or, lalu Xor |
Ekspresi 2 + 3 * 4 menghasilkan 14 karena perkalian dikerjakan sebelum penjumlahan, sedangkan (2 + 3) * 4 menghasilkan 20 karena tanda kurung menaikkan prioritasnya. Menambahkan tanda kurung meskipun tidak wajib adalah kebiasaan yang baik, karena ekspresi yang panjang menjadi terbaca tanpa harus menghafal tabel di atas.
Kesalahan umum#
Tiga kesalahan berikut paling sering muncul ketika ekspresi mulai bercabang.
- Menggunakan
/untuk menghitung nilai yang diharapkan bulat. HasilnyaDoubleberpecahan, dan perbaikannya adalah operator\atau pembulatan yang disengaja. - Menyusun pemeriksaan dengan
Andpada kondisi yang bergantung satu sama lain. Bentukteks IsNot Nothing And teks.Length > 0tetap mengevaluasiteks.LengthmeskipunteksberisiNothing, sehingga memicu exception, sedangkan bentuk yang sama denganAndAlsoaman karena evaluasinya berhenti lebih awal. - Membaca tabel urutan terbalik pada ekspresi bercampur.
-2 ^ 2menghasilkan-4dan bukan4karena pangkat lebih dahulu, sehingga maksud perhitungan dinyatakan dengan tanda kurung.
Pada ketiganya, kejelasan ekspresi diutamakan daripada kepadatannya, sehingga pembaca berikutnya tidak perlu menyusun ulang urutan pengerjaan dari ingatannya.
Ringkasan#
- Operator aritmetika terbagi atas
/untuk pecahan,\untuk pembagian bulat,Moduntuk sisa, dan^untuk pangkat, dengan pembagian bulat oleh nol memicu exception. - Operator perbandingan selalu menghasilkan
Boolean, dan=pada string membandingkan isinya secara peka huruf besar-kecil. AndAlsodanOrElsebekerja dengan sifat short-circuit sehingga pemeriksaan berantai menjadi aman, sedangkanAnddanOrselalu mengevaluasi kedua operand.- Urutan pengerjaan dimulai dari
^sampai operator logika, dan tanda kurung menaikkan prioritas sekaligus memperjelas maksud ekspresi.
Referensi#
- Operators in Visual Basic — Microsoft Learn — Daftar seluruh operator VB.NET beserta kelompoknya.
- Operator Precedence — Microsoft Learn — Urutan pengerjaan operator dari yang tertinggi.
- \ Operator — Microsoft Learn — Pembagian bulat beserta pembulatan hasilnya.
- Mod Operator — Microsoft Learn — Perhitungan sisa pembagian dua bilangan.
- AndAlso Operator — Microsoft Learn — Konjungsi logika dengan evaluasi short-circuit.
- OrElse Operator — Microsoft Learn — Disjungsi logika dengan evaluasi short-circuit.