dartlistmethodMenengah5 mnt baca

Method List Penting

add, remove, where, map, dan method transformasi list lainnya.

Perkakas bawaan list

List bukan sekadar wadah, ia datang dengan puluhan method siap pakai: mencari, mengurutkan, memfilter, memeriksa. Menghafal semuanya tidak perlu; yang penting tahu pola dan yang paling sering dipakai.

Analogi: membeli pisau set dapur. Kamu tidak memakai semua 12 pisau tiap hari, tapi tahu pisau mana untuk roti dan mana untuk daging membuat masak jauh lebih cepat.

Kenapa method list penting?

Karena operasi pada koleksi adalah 80% pekerjaan programmer sehari-hari. Menulis loop manual untuk mencari elemen itu bisa, tapi contains() satu baris lebih jelas dan lebih kecil kemungkinan salah.

Method esensial

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

  print(buah.contains('apel'));   // true, apakah ada?
  print(buah.indexOf('pisang'));  // 2, index pertama yang cocok
  print(buah.indexOf('durian'));  // -1, artinya TIDAK KETEMU

  buah.sort();                    // urutkan alfabetis, ubah langsung
  print(buah); // [apel, apel, mangga, pisang]

  buah = buah.reversed.toList();  // balik urutan (butuh toList!)
  print(buah); // [pisang, mangga, apel, apel]

  print(buah.isEmpty);  // false
  print(buah.isNotEmpty); // true
}

Catatan penting: sort() mengubah list asli, sedangkan reversed mengembalikan iterable baru sehingga butuh .toList() untuk jadi list lagi.

Contoh kedua, sublist dan join:

dart
void main() {
  var angka = [10, 20, 30, 40, 50];

  print(angka.sublist(1, 4)); // [20, 30, 40], index 1 sampai SEBELUM 4
  print(angka.sublist(2));    // [30, 40, 50], dari index 2 sampai akhir

  var kata = ['Halo', 'dunia', 'Dart'];
  print(kata.join(' '));  // Halo dunia Dart
  print(kata.join(', ')); // Halo, dunia, Dart

  angka.clear(); // kosongkan semua
  print(angka);  // []
  print(angka.isEmpty); // true
}

join() adalah cara idiomatis menggabung list string, jauh lebih rapi daripada loop manual dengan +.

firstWhere dan singleWhere: cari dengan syarat

dart
void main() {
  var nilai = [55, 80, 45, 90];

  // Elemen pertama yang memenuhi syarat
  var lulusPertama = nilai.firstWhere((n) => n >= 70);
  print(lulusPertama); // 80

  // AMAN: pakai orElse agar tidak error saat tidak ketemu
  var sempurna = nilai.firstWhere((n) => n == 100, orElse: () => -1);
  print(sempurna); // -1
}

firstWhere tanpa orElse akan melempar error jika tidak ada yang cocok. Selalu sediakan orElse untuk kode yang aman.

Kesalahan umum

1. indexOf mengembalikan -1, bukan error

dart
// SALAH: langsung pakai hasil tanpa cek
void main() {
  var buah = ['apel', 'mangga'];
  int i = buah.indexOf('durian');
  // print(buah[i]); // ERROR: index -1!
}
dart
// BENAR
void main() {
  var buah = ['apel', 'mangga'];
  int i = buah.indexOf('durian');
  if (i != -1) {
    print(buah[i]);
  } else {
    print('Tidak ketemu');
  }
}

2. Lupa toList() setelah reversed/map/where

dart
void main() {
  var angka = [3, 1, 2];
  var balik = angka.reversed; // Iterable, BUKAN List
  // balik.add(4); // ERROR: Iterable tidak punya add
  var balikList = angka.reversed.toList();
  balikList.add(4);
  print(balikList); // [2, 1, 3, 4]
}

3. firstWhere tanpa orElse

dart
// SALAH: error jika tidak ada yang cocok
void main() {
  var nilai = [55, 60];
  // print(nilai.firstWhere((n) => n > 90)); // StateError!
}
dart
// BENAR
void main() {
  var nilai = [55, 60];
  print(nilai.firstWhere((n) => n > 90, orElse: () => -1)); // -1
}

Kesimpulan

Method list yang paling sering dipakai: contains, indexOf, sort, reversed, sublist, join, firstWhere (+ orElse), isEmpty/isNotEmpty. Hafalkan pola "cek -1" dan "tambah orElse", dua kebiasaan kecil pencegah crash besar.

Catatan teknis: Banyak method mengembalikan Iterable (malas/lazy), bukan List. Iterable hanya dihitung saat diiterasi, sehingga efisien untuk rantai operasi panjang. Panggil .toList() saat butuh list konkret.

Tantangan

Olah data nilai

Dari list [50, 75, 90, 40, 85]: saring yang >= 60, kalikan 1.1 (bonus 10%), bulatkan ke int, lalu cetak list hasilnya dan totalnya (pakai fold).

text
void main() {
  var nilai = [50, 75, 90, 40, 85];
  // TODO: where -> map -> toList, lalu fold untuk total
}