listcollectionMenengah5 mnt baca

List di Dart

Menyimpan banyak data berurutan: membuat, mengakses, menambah, dan mengolah List.

List: rak berurutan

List menyimpan banyak nilai dalam satu variabel, dengan urutan dan index mulai dari 0:

dart
void main() {
  var buah = ['apel', 'mangga', 'pisang'];

  print(buah[0]);      // apel (index pertama)
  print(buah[2]);      // pisang
  print(buah.length);  // 3
  print(buah.last);    // pisang
}

Bayangkan list seperti rak: tiap slot punya nomor. Nomor pertama selalu 0, bukan 1.

Menambah, mengubah, menghapus

dart
void main() {
  var nilai = [80, 90, 75];
  print(nilai); // [80, 90, 75]

  nilai.add(85);        // tambah di akhir
  nilai.insert(1, 95);  // sisipkan di index 1
  nilai[0] = 100;       // ubah index 0
  nilai.remove(75);     // hapus nilai 75
  nilai.removeAt(0);    // hapus index 0

  print(nilai); // [95, 90, 85]
}

Catatan teknis: Mengakses index di luar jangkauan (buah[10] saat isinya cuma 3) melempar error RangeError dan program berhenti. Selalu pastikan index valid, mis. cek i < list.length dulu di dalam loop manual.

List dengan tipe eksplisit

var buah = ['apel', ...] otomatis bertipe List<String>. Tapi kadang perlu ditulis eksplisit, mis. list kosong:

dart
void main() {
  // var kosong = []; // List<dynamic>, hindari ini
  var nama = <String>[]; // list kosong khusus String
  nama.add('Rizky');
  // nama.add(123); // ERROR: bukan String
  print(nama);
}

<String>[] adalah cara menulis list kosong bertipe. Tanpa itu, Dart menganggapnya List<dynamic> dan pengecekan tipe hilang.

Mengolah list: map, where, forEach

Tiga method ini adalah senjata utama pengolahan data:

dart
void main() {
  var angka = [1, 2, 3, 4, 5];

  var dikaliDua = angka.map((x) => x * 2).toList();
  print(dikaliDua); // [2, 4, 6, 8, 10]

  var genap = angka.where((x) => x % 2 == 0).toList();
  print(genap); // [2, 4]

  angka.forEach((x) => print('Angka: $x'));
}
  • map: ubah tiap elemen jadi bentuk lain
  • where: saring elemen yang memenuhi kondisi
  • forEach: lakukan sesuatu untuk tiap elemen

.toList() di akhir penting karena map dan where mengembalikan Iterable (dievaluasi secara malas), bukan List.

Spread operator dan collection if

Dart punya sintaks manis untuk menggabung list:

dart
void main() {
  var a = [1, 2];
  var gabung = [0, ...a, 3]; // spread: bongkar isi a
  print(gabung); // [0, 1, 2, 3]

  bool lapar = true;
  var menu = ['nasi', if (lapar) 'ayam', 'es teh'];
  print(menu); // [nasi, ayam, es teh]
}

... (spread) membongkar isi list lain ke dalam list baru. if di dalam list (collection if) menyertakan elemen hanya kalau kondisi true. Keduanya sering dipakai di Flutter untuk menyusun daftar widget secara dinamis.

Latihan: nilai rata-rata

dart
void main() {
  var nilai = [80, 90, 75, 85, 95];

  int total = 0;
  for (var n in nilai) {
    total += n;
  }
  double rata = total / nilai.length;

  print('Total: $total');
  print('Rata-rata: $rata');
}

Coba modifikasi: tampilkan juga nilai tertinggi (nilai.reduce((a, b) => a > b ? a : b)) dan berapa yang di atas rata-rata pakai where.