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
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:
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
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
// SALAH: langsung pakai hasil tanpa cek
void main() {
var buah = ['apel', 'mangga'];
int i = buah.indexOf('durian');
// print(buah[i]); // ERROR: index -1!
}// 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
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
// SALAH: error jika tidak ada yang cocok
void main() {
var nilai = [55, 60];
// print(nilai.firstWhere((n) => n > 90)); // StateError!
}// 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), bukanList. 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).
void main() {
var nilai = [50, 75, 90, 40, 85];
// TODO: where -> map -> toList, lalu fold untuk total
}