Langsung ke konten
KamusNgoding
Pemula Csharp 3 menit baca

Operator dan Ekspresi di C#

#csharp #operator #ekspresi #aritmatika #null-coalescing #string-interpolasi #ternary

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:

KategoriOperatorKeterangan
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 checkingis, asPengecekan 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#.

Artikel Terkait