Operator

Operator aritmetika, perbandingan, dan logika AndAlso/OrElse beserta urutan pengerjaannya.

Daftar isi

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.

OperatorKegunaanContohHasil
+Penjumlahan2 + 35
-Pengurangan5 - 23
*Perkalian4 * 312
/Pembagian pecahan7 / 23.5
\Pembagian bulat7 \ 23
ModSisa pembagian7 Mod 21
^Pangkat2 ^ 101024

Program berikut menjalankan serangkaian perhitungan tersebut, termasuk dua perilaku yang menonjol, yaitu / yang selalu menghasilkan pecahan dan \ yang memotong bagian desimalnya.

vb Program.vb
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 Module
text Keluaran
14
20
3.5
3
1
40
1024
-4

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

vb
' tidak-dijalankan
Console.WriteLine(10 \ nol) ' nol bertipe Integer: DivideByZeroException saat dijalankan

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

vb Contoh: operator perbandingan menghasilkan Boolean
Module ContohPerbandingan

    Sub Main()
        Dim nilai As Integer = 75

        Console.WriteLine(nilai >= 75)
        Console.WriteLine(nilai <> 75)
        Console.WriteLine("budi" = "Budi")
    End Sub

End Module
text Keluaran
True
False
False

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

vb Contoh: AndAlso dan OrElse menghentikan evaluasi lebih awal
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 Module
text Keluaran
False
True

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

UrutanOperator
1^
2+ dan - unary
3* dan /
4\
5Mod
6+ dan -
7&
8<< dan >>
9Operator perbandingan =, <>, <, >, <=, >=
10Not, 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.

  1. Menggunakan / untuk menghitung nilai yang diharapkan bulat. Hasilnya Double berpecahan, dan perbaikannya adalah operator \ atau pembulatan yang disengaja.
  2. Menyusun pemeriksaan dengan And pada kondisi yang bergantung satu sama lain. Bentuk teks IsNot Nothing And teks.Length > 0 tetap mengevaluasi teks.Length meskipun teks berisi Nothing, sehingga memicu exception, sedangkan bentuk yang sama dengan AndAlso aman karena evaluasinya berhenti lebih awal.
  3. Membaca tabel urutan terbalik pada ekspresi bercampur. -2 ^ 2 menghasilkan -4 dan bukan 4 karena 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, Mod untuk 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.
  • AndAlso dan OrElse bekerja dengan sifat short-circuit sehingga pemeriksaan berantai menjadi aman, sedangkan And dan Or selalu mengevaluasi kedua operand.
  • Urutan pengerjaan dimulai dari ^ sampai operator logika, dan tanda kurung menaikkan prioritas sekaligus memperjelas maksud ekspresi.

Referensi#