Operator di Dart
Operator aritmatika, perbandingan, logika, dan assignment untuk mengolah data.
Operator aritmatika
Yang paling sering dipakai sehari-hari:
void main() {
int a = 10;
int b = 3;
print(a + b); // 13 penjumlahan
print(a - b); // 7 pengurangan
print(a * b); // 30 perkalian
print(a / b); // 3.333... pembagian (hasil double)
print(a ~/ b); // 3 pembagian bulat
print(a % b); // 1 sisa bagi (modulo)
}Modulo (%) sangat berguna, mis. cek genap/ganjil: angka % 2 == 0 berarti genap.
Operator perbandingan
Menghasilkan boolean, dipakai di kondisi:
void main() {
int umur = 17;
print(umur > 16); // true
print(umur >= 18); // false
print(umur == 17); // true
print(umur != 17); // false
}Ingat: == untuk membandingkan, = untuk mengisi nilai. Tertukar keduanya adalah bug klasik pemula di semua bahasa.
Operator logika
Menggabungkan beberapa kondisi:
void main() {
int umur = 17;
bool punyaKTP = false;
print(umur >= 17 && punyaKTP); // false (AND: keduanya harus true)
print(umur >= 17 || punyaKTP); // true (OR: salah satu true cukup)
print(!punyaKTP); // true (NOT: membalik)
}Dart memakai short-circuit evaluation: pada &&, kalau kondisi kiri sudah false, kanan tidak dicek. Pada ||, kalau kiri sudah true, kanan dilewati. Ini bisa dimanfaatkan, mis. user != null && user.nama == 'Rizky' aman karena cek null dulu.
Operator assignment ringkas
void main() {
int skor = 10;
skor += 5; // sama dengan skor = skor + 5 -> 15
skor -= 3; // 12
skor *= 2; // 24
skor ~/= 5; // 4 (pembagian bulat)
print(skor);
int i = 0;
i++; // tambah 1 -> 1
i--; // kurang 1 -> 0
print(i);
}Operator khusus Dart: ?? dan ?.
Dua operator ini jadi andalan programmer Dart:
void main() {
String? nama; // boleh null (dibahas detail di modul null safety)
String tampil = nama ?? 'Tamu'; // kalau null, pakai 'Tamu'
print(tampil); // Tamu
String? teks;
print(teks?.length); // null, tidak error
// print(teks.length); // ERROR kalau teks null
}Operator ?? artinya "pakai nilai kiri, tapi kalau null pakai kanan". Operator ?. artinya "panggil method ini hanya kalau objeknya tidak null".
Catatan teknis:
i++vs++ibeda perilaku kalau dipakai di dalam ekspresi.print(i++)mencetak nilai lama lalu menambah, sedangkanprint(++i)menambah dulu baru mencetak. Untuk menghindari bingung, pakai increment di baris tersendiri, jangan di dalam ekspresi kompleks.
Urutan prioritas
Seperti matematika: perkalian dan pembagian dikerjakan sebelum penjumlahan. Kalau ragu, pakai tanda kurung, tidak ada salahnya dan kode jadi lebih jelas:
void main() {
int hasil = 2 + 3 * 4; // 14, bukan 20
int jelas = (2 + 3) * 4; // 20
print('$hasil vs $jelas');
}