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:
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
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 errorRangeErrordan program berhenti. Selalu pastikan index valid, mis. ceki < list.lengthdulu di dalam loop manual.
List dengan tipe eksplisit
var buah = ['apel', ...] otomatis bertipe List<String>. Tapi kadang perlu ditulis eksplisit, mis. list kosong:
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:
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 lainwhere: saring elemen yang memenuhi kondisiforEach: 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:
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
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.