tipe-datadasarPemula5 mnt baca

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:

dart
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:

dart
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:

dart
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:

dart
var puisi = '''
Baris satu
Baris dua
''';

Boolean: bool

Hanya ada dua nilai: true dan false. Dipakai untuk kondisi:

dart
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 if wajib boolean murni. if (1) atau if ('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:

dart
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:

dart
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.