Operator adalah simbol yang memberi instruksi kepada compiler untuk melakukan operasi tertentu. C# memiliki semua operator yang ada di bahasa lain, ditambah beberapa operator modern yang sangat berguna seperti ?? (null-coalescing) dan ?. (null-conditional). Menguasai operator adalah kunci untuk menulis kode C# yang bersih dan efisien.
Operator Aritmatika
int a = 10, b = 3;
Console.WriteLine(a + b); // Output: 13 (penjumlahan)
Console.WriteLine(a - b); // Output: 7 (pengurangan)
Console.WriteLine(a * b); // Output: 30 (perkalian)
Console.WriteLine(a / b); // Output: 3 (pembagian integer!)
Console.WriteLine(a % b); // Output: 1 (modulo/sisa bagi)
// Untuk hasil desimal
double x = 10.0, y = 3.0;
Console.WriteLine(x / y); // Output: 3.33333333333333
// Atau casting
Console.WriteLine((double)a / b); // Output: 3.33333333333333
Operator Penugasan
int nilai = 100;
nilai += 25; // nilai = nilai + 25 → 125
nilai -= 10; // nilai = nilai - 10 → 115
nilai *= 2; // nilai = nilai * 2 → 230
nilai /= 5; // nilai = nilai / 5 → 46
nilai %= 10; // nilai = nilai % 10 → 6
Console.WriteLine(nilai); // Output: 6
Operator Increment dan Decrement
int x = 5;
Console.WriteLine(x++); // Output: 5 (cetak dulu, baru tambah)
Console.WriteLine(x); // Output: 6
Console.WriteLine(++x); // Output: 7 (tambah dulu, baru cetak)
Console.WriteLine(x); // Output: 7
int y = 10;
Console.WriteLine(y--); // Output: 10 (cetak dulu, baru kurang)
Console.WriteLine(--y); // Output: 8 (kurang dulu, baru cetak)
Operator Perbandingan
int a = 10, b = 20;
Console.WriteLine(a == b); // Output: False
Console.WriteLine(a != b); // Output: True
Console.WriteLine(a < b); // Output: True
Console.WriteLine(a > b); // Output: False
Console.WriteLine(a <= 10); // Output: True
Console.WriteLine(a >= 11); // Output: False
Untuk string, gunakan .Equals() atau ==:
string s1 = "halo";
string s2 = "HALO";
Console.WriteLine(s1 == s2); // Output: False (case-sensitive)
Console.WriteLine(s1.Equals(s2, StringComparison.OrdinalIgnoreCase));
// Output: True (case-insensitive)
Operator Logika
bool hujan = true;
bool macet = false;
// AND (&&) — keduanya harus true
Console.WriteLine(hujan && macet); // Output: False
Console.WriteLine(hujan && true); // Output: True
// OR (||) — salah satu cukup true
Console.WriteLine(hujan || macet); // Output: True
Console.WriteLine(false || macet); // Output: False
// NOT (!)
Console.WriteLine(!hujan); // Output: False
Console.WriteLine(!macet); // Output: True
// Contoh nyata
int umur = 20;
bool punya_ktp = true;
if (umur >= 17 && punya_ktp)
{
Console.WriteLine("Bisa membuat SIM");
}
// Output: Bisa membuat SIM
Operator Ternary
Ekspresi kondisional ringkas:
int nilai = 75;
string status = (nilai >= 60) ? "Lulus" : "Tidak Lulus";
Console.WriteLine(status); // Output: Lulus
// Nested ternary (gunakan dengan hati-hati, bisa susah dibaca)
string grade = (nilai >= 90) ? "A" :
(nilai >= 80) ? "B" :
(nilai >= 70) ? "C" :
(nilai >= 60) ? "D" : "E";
Console.WriteLine(grade); // Output: C
Operator Null-Coalescing (??)
Mengembalikan nilai kiri jika tidak null, nilai kanan jika null — sangat berguna untuk nilai default:
string? nama = null;
string tampil = nama ?? "Tamu";
Console.WriteLine(tampil); // Output: Tamu
string nama2 = "Budi";
string tampil2 = nama2 ?? "Tamu";
Console.WriteLine(tampil2); // Output: Budi
// ??= (null-coalescing assignment)
string? kota = null;
kota ??= "Jakarta"; // Isi dengan "Jakarta" hanya jika null
Console.WriteLine(kota); // Output: Jakarta
kota ??= "Surabaya"; // Tidak berubah karena kota sudah tidak null
Console.WriteLine(kota); // Output: Jakarta
Operator Null-Conditional (?.)
Mengakses anggota objek dengan aman — jika objek null, hasilnya null (bukan NullReferenceException):
string? teks = null;
// Cara berbahaya (bisa throw exception)
// int panjang = teks.Length; // ❌ NullReferenceException!
// Cara aman dengan ?.
int? panjang = teks?.Length;
Console.WriteLine(panjang ?? 0); // Output: 0
// Chaining
string? nama = null;
int? jumlah = nama?.ToUpper()?.Length;
Console.WriteLine(jumlah ?? -1); // Output: -1
// Contoh nyata
string? input = Console.ReadLine();
bool ada_data = input?.Trim()?.Length > 0;
Operator is dan as (Type Checking)
object obj = "Halo dunia";
// is — mengecek tipe
if (obj is string)
{
Console.WriteLine("obj adalah string");
// Output: obj adalah string
}
// is dengan pattern matching (C# 7+)
if (obj is string teks)
{
Console.WriteLine($"Panjangnya: {teks.Length}");
// Output: Panjangnya: 10
}
// as — konversi tipe (null jika gagal, bukan exception)
string? hasil = obj as string;
Console.WriteLine(hasil?.ToUpper() ?? "Bukan string");
// Output: HALO DUNIA
Urutan Prioritas Operator
// Operator perkalian lebih tinggi dari penjumlahan
int hasil = 2 + 3 * 4; // 2 + (3*4) = 14
Console.WriteLine(hasil); // Output: 14
// Gunakan tanda kurung untuk kejelasan
int hasil2 = (2 + 3) * 4;
Console.WriteLine(hasil2); // Output: 20
// Logika: && lebih tinggi dari ||
bool cek = true || false && false;
// Diproses sebagai: true || (false && false) = true || false = true
Console.WriteLine(cek); // Output: True
Pertanyaan yang Sering Diajukan
Apa itu operator ?? dan kapan menggunakannya?
Operator ?? (null-coalescing) mengembalikan operand kiri jika bukan null, atau operand kanan jika null. Sangat berguna untuk menentukan nilai default: string nama = input ?? "Tamu". Ini lebih ringkas dari string nama = input != null ? input : "Tamu".
Apa perbedaan ?. dengan pengecekan null biasa?
obj?.Property setara dengan obj != null ? obj.Property : null, tapi lebih ringkas. Yang terpenting, ?. tidak pernah melempar NullReferenceException — ini sangat berguna saat bekerja dengan data dari database atau API yang mungkin null.
Kapan menggunakan operator is vs casting langsung?
Gunakan is saat kamu tidak yakin tipenya — aman karena tidak melempar exception. Gunakan casting (Tipe)obj hanya jika kamu 100% yakin tipenya benar, karena jika salah akan melempar InvalidCastException. Pendekatan modern: if (obj is string s) { ... } menggabungkan pengecekan dan konversi sekaligus.
Apakah == untuk string aman di C#?
Ya, di C# == untuk string membandingkan isi string (nilai), bukan referensi memori. Ini berbeda dari Java di mana == untuk String membandingkan referensi. Jadi "halo" == "halo" di C# selalu true.
Kesimpulan
Ringkasan operator C# yang telah dipelajari:
| Kategori | Operator | Keterangan |
|---|---|---|
| Aritmatika | +, -, *, /, % | Operasi matematika |
| Penugasan | =, +=, -=, *= | Menetapkan nilai |
| Perbandingan | ==, !=, <, >, <=, >= | Membandingkan nilai |
| Logika | &&, ||, ! | Kombinasi kondisi |
| Ternary | ? : | Kondisi ringkas |
| Null-coalescing | ??, ??= | Nilai default untuk null |
| Null-conditional | ?. | Akses aman saat null |
| Type checking | is, as | Pengecekan dan konversi tipe |
Artikel sebelumnya: Variabel dan Tipe Data di C# — cara menyimpan data di C#.
Langkah selanjutnya: Percabangan dan Perulangan di C# — cara membuat pengambilan keputusan dan iterasi dalam program C#.