Tipe Data di Dart
Mengenal int, double, String, bool, dan dynamic: fondasi semua data di Dart.
Semua di Dart adalah object
Satu hal unik dari Dart: semuanya adalah object, termasuk angka dan boolean. Artinya setiap nilai punya method dan property yang bisa dipanggil. Contoh: 17.isEven menghasilkan true.
Angka: int dan double
Dart membedakan bilangan bulat dan desimal:
void main() {
int umur = 17;
double tinggi = 170.5;
print(umur + 3); // 20
print(tinggi / 2); // 85.25
}Perhatikan: double berat = 65; itu error di Dart. Tidak ada konversi otomatis dari int ke double. Harus ditulis 65.0 atau 65.toDouble(). Ini salah satu bentuk ketegasan Dart soal tipe data.
Operasi antar int dan double menghasilkan double:
void main() {
int a = 7;
double b = 2.5;
print(a + b); // 9.5 (double)
print(a ~/ 2); // 3 (pembagian bulat, pakai ~/)
}Operator ~/ adalah pembagian yang hasilnya dibulatkan ke bawah menjadi int.
Teks: String
String ditulis dengan tanda kutip satu atau dua, bebas pilih tapi konsisten:
void main() {
String nama = 'Rizky';
String sapa = "Halo, $nama!"; // interpolation dengan $
String umur = 'Umurku ${17 + 1} tahun'; // ekspresi pakai ${}
print(sapa); // Halo, Rizky!
print(umur); // Umurku 18 tahun
print(nama.length); // 5
print(nama.toUpperCase()); // RIZKY
}String yang panjang bisa ditulis multi-baris dengan tiga kutip:
var puisi = '''
Baris satu
Baris dua
''';Boolean: bool
Hanya ada dua nilai: true dan false. Dipakai untuk kondisi:
void main() {
bool lulus = true;
bool hujan = false;
if (lulus && !hujan) {
print('Waktunya main!');
}
}Catatan teknis: Berbeda dengan JavaScript atau Python, Dart tidak punya truthy/falsy. Kondisi
ifwajib boolean murni.if (1)atauif ('teks')akan error. Ini memang disengaja supaya kode lebih eksplisit dan tidak ambigu.
dynamic dan var: jangan tertukar
var menebak tipe sekali lalu mengunci. dynamic mematikan pengecekan tipe sepenuhnya:
void main() {
var a = 'teks';
// a = 123; // ERROR: a sudah dikunci sebagai String
dynamic b = 'teks';
b = 123; // boleh, tapi berbahaya
b = true; // boleh juga
print(b);
}dynamic seperti mematikan sabuk pengaman: boleh dipakai untuk kasus khusus (mis. data JSON yang strukturnya belum pasti), tapi jangan jadi kebiasaan. Kehilangan pengecekan tipe berarti bug baru ketahuan saat program jalan, bukan saat ditulis.
Konversi antar tipe
Sering perlu mengubah tipe data, mis. input user yang selalu String:
void main() {
String teksAngka = '42';
int angka = int.parse(teksAngka);
double desimal = double.parse('3.14');
String kembali = angka.toString();
print(angka + 8); // 50
print(desimal); // 3.14
print(kembali); // '42'
}int.parse akan error kalau teksnya bukan angka valid. Nanti di modul exception kita bahas cara menanganinya dengan aman.