Topik ini membahas operator (operator) dan ekspresi di C#, yaitu simbol yang mengolah nilai dan kombinasi operand yang menghasilkan nilai baru. Operator aritmetika, perbandingan, dan logika dibahas berurutan, kemudian ditutup dengan aturan prioritas yang menentukan urutan penghitungan. Setelah topik ini diselesaikan, ekspresi bertingkat dapat ditulis dan dibaca sesuai urutan yang benar.
Operator aritmetika#
Operator aritmetika menghitung nilai angka. Lima operator dasarnya adalah penjumlahan +, pengurangan -, perkalian *, pembagian /, dan sisa bagi %. Program berikut menerapkan semuanya pada sepasang bilangan bulat yang mudah dihitung ulang.
Console.WriteLine(10 + 3);
Console.WriteLine(10 - 3);
Console.WriteLine(10 * 3);
Console.WriteLine(10 / 3);
Console.WriteLine(10 % 3);13
7
30
3
1Dua baris terakhir patut dicermati. Pembagian dua int menghasilkan int, sehingga bagian desimalnya dipotong dan 10 / 3 menghasilkan 3. Operator % menghasilkan sisa pembagiannya, yaitu 1, dan sering dipakai untuk menguji keterbagian atau menyikapi perulangan siklik. Bila hasil pecahan diinginkan, salah satu operand harus bertipe pecahan.
double pembagian = 7.0 / 2.0;
Console.WriteLine(pembagian);3.5Pembagian dengan nol berlaku berbeda untuk kedua jenis angka. Pembagian int oleh nol memunculkan exception DivideByZeroException dan menghentikan program, sedangkan pembagian double oleh nol menghasilkan nilai khusus yang berarti tak hingga tanpa memunculkan error apa pun. Perbedaan ini berasal dari standar aritmetika pecahan yang diikuti tipe double, dan menjadi alasan tambahan untuk memilih tipe angka sesuai kebutuhan sejak deklarasi.
Penugasan juga dapat digabung dengan operator aritmetika. Bentuk a += b merupakan singkatan dari a = a + b, dan pola yang sama berlaku untuk operator lainnya. Operator penambahan satu ++ khusus menghitung naik sebesar satu, sehingga cocok untuk variabel penghitung.
int penghitung = 0;
penghitung += 5;
penghitung++;
Console.WriteLine(penghitung);6Operator perbandingan dan logika#
Operator perbandingan membandingkan dua nilai dan menghasilkan bool, yaitu true atau false. Operator utamanya adalah == (sama dengan), != (tidak sama dengan), <, >, <=, dan >=. Operator logika menggabungkan nilai bool, yaitu && (dan), || (atau), serta ! (negasi). Program berikut memakai keduanya pada kasus kelulusan sederhana.
int nilai = 75;
Console.WriteLine(nilai >= 75);
Console.WriteLine(nilai == 80);
Console.WriteLine(nilai != 80);
bool lulusNilai = nilai >= 75;
bool hadirPenuh = false;
Console.WriteLine(lulusNilai && hadirPenuh);
Console.WriteLine(lulusNilai || hadirPenuh);
Console.WriteLine(!hadirPenuh);True
False
True
False
True
TrueOperator && menghasilkan true hanya bila kedua operannya true, sedangkan || menghasilkan true bila salah satu operannya true. Kedua operator ini bekerja dengan cara short-circuit (evaluasi pendek), artinya operan kanan tidak dihitung bila hasilnya sudah pasti. Apabila operan kiri && bernilai false, operan kanan tidak dievaluasi sama sekali. Sifat ini berguna untuk menguji kondisi yang mahal atau yang bergantung pada kondisi sebelumnya.
Operator == dan != juga berlaku untuk string, dan pembandingannya menilai isi teksnya, bukan lokasi penyimpanan objeknya. Dua string dengan huruf besar kecil yang berbeda dianggap tidak sama, sehingga penyeragaman lewat metode ToUpper() atau ToLower() sering disertakan sebelum perbandingan. Perbandingan < hingga >= pada string membandingkan urutan alfabetisnya, tetapi pemakaian seperti ini jarang diperlukan pada program konsol tahap awal.
Prioritas operator#
Setiap operator memiliki prioritas (precedence), yaitu urutan keutamaan saat beberapa operator muncul dalam satu ekspresi. Operator *, /, dan % dihitung lebih dahulu daripada + dan -, sedangkan tanda kurung memaksa urutan apa pun yang diinginkan. Program berikut menunjukkan perbedaannya secara langsung.
Console.WriteLine(2 + 3 * 4);
Console.WriteLine((2 + 3) * 4);
Console.WriteLine(true || false && false);14
20
TrueEkspresi pertama menghasilkan 14 karena perkalian 3 * 4 dihitung sebelum penjumlahan, sedangkan tanda kurung pada ekspresi kedua membalik urutannya menjadi 20. Ekspresi ketiga menghasilkan true karena && memiliki prioritas lebih tinggi daripada ||, sehingga bagian false && false dihitung lebih dahulu. Tanda kurung tidak mengubah prioritas yang sudah benar, tetapi memperjelas maksud bagi pembaca kode.
Urutan prioritas yang berlaku pada operator-operator di topik ini, dari yang dihitung lebih dahulu, adalah sebagai berikut.
- Negasi
!dan tanda negatif pada angka. - Perkalian
*, pembagian/, dan sisa bagi%. - Penjumlahan
+dan pengurangan-. - Perbandingan
<,>,<=, dan>=. - Kesetaraan
==dan!=. - Logika
&&. - Logika
||.
Daftar tersebut hanya meliputi operator yang sudah diperkenalkan, sedangkan C# masih menyediakan banyak operator lain dengan aturan prioritas masing-masing. Prinsip kerjanya tetap sama, yaitu prioritas menentukan pengelompokan otomatis dan tanda kurung menimpanya.
Operator dengan prioritas yang sama dihitung mengikuti asosiativitas (associativity), yaitu arah pengelompokannya. Operator aritmetika bersifat asosiatif kiri, sehingga 20 - 5 - 3 dihitung sebagai (20 - 5) - 3 dan menghasilkan 12, bukan 18. Pengurangan yang diperlakukan salah arah sering terasa benar di mata karena hasil akhirnya terlihat wajar, meski maknanya berbeda. Operator penugasan dan operator bersyarat justru bersifat asosiatif kanan, tetapi keduanya berada di luar lingkup topik ini. Bila arah pengelompokan menimbulkan keraguan, tanda kurung tetap menjadi jawaban yang paling aman sekaligus paling mudah dibaca.
Kesalahan umum#
- Menganggap pembagian bulat membulatkan.
10 / 3menghasilkan3tanpa pesan apa pun karena perilaku ini memang didefinisikan begitu. Gunakan operanddoublebila hasil pecahan dibutuhkan. - Mencampur
=dan==. Penugasan=mengisi nilai, sedangkan perbandingan==menguji kesamaan. Kebocoran antar keduanya dalam kondisi langsung tertangkap kompilator karenaifmenuntut nilaibool. - Mengandalkan urutan tanpa tanda kurung. Ekspresi logika yang panjang sulit dibaca dan mudah disalahpahami. Tanda kurung yang menonjolkan grup kondisi menghilangkan keraguan tanpa mengubah hasil.
Ringkasan#
- Operator aritmetika terdiri atas
+,-,*,/, dan%, dan pembagian duaintmemotong bagian desimalnya. - Operator perbandingan menghasilkan
bool, sedangkan&&,||, dan!menggabungkan nilaibooldengan evaluasi pendek. - Prioritas operator menentukan urutan penghitungan, dan tanda kurung memaksa atau memperjelas urutan tersebut.
- Bentuk penugasan gabungan seperti
+=serta operator++merapikan pembaruan nilai pada variabel penghitung.
Referensi#
- Operators and expressions — Microsoft Learn — Daftar lengkap operator C# beserta tabel prioritasnya.