List Dasar
Membuat list, mengakses index, dan properti penting list.
Daftar: satu variabel, banyak nilai
Sejauh ini satu variabel menyimpan satu nilai. Tapi bagaimana menyimpan 30 nama siswa? Membuat 30 variabel itu konyol. List adalah variabel yang menampung banyak nilai berurutan dalam satu wadah.
Analogi: list itu seperti gerbong kereta. Satu rangkaian (satu variabel), banyak gerbong (elemen), tiap gerbong punya nomor urut (index) mulai dari 0.
Kenapa list fundamental?
Hampir semua data nyata berbentuk jamak: daftar produk, riwayat chat, nilai siswa. Di Flutter, list adalah bahan bakar utama UI: daftar menu, daftar pesan, semua dirender dari list. Menguasai list berarti menguasai separuh pemrograman praktis.
Membuat dan mengakses list
void main() {
// List of String: tanda <String> opsional tapi disarankan
List<String> buah = ['apel', 'mangga', 'pisang'];
print(buah); // [apel, mangga, pisang]
print(buah[0]); // apel (index mulai dari 0!)
print(buah[2]); // pisang
print(buah.length); // 3, jumlah elemen
// Index terakhir = length - 1
print(buah[buah.length - 1]); // pisang
}Tiga hal yang wajib dihafal: index mulai dari 0, length menghitung jumlah, dan list[i] mengakses elemen ke-i.
Contoh kedua, mengubah isi list:
void main() {
var nilai = [80, 90, 75];
nilai[1] = 95; // ubah elemen index 1
print(nilai); // [80, 95, 75]
nilai.add(88); // tambah di akhir
print(nilai); // [80, 95, 75, 88]
nilai.insert(0, 100); // sisipkan di posisi 0
print(nilai); // [100, 80, 95, 75, 88]
nilai.remove(75); // hapus nilai 75
print(nilai); // [100, 80, 95, 88]
}List di Dart bisa diubah (mutable) secara default: tambah, sisip, hapus, ubah sesukamu.
List generik: tipe yang dijaga
void main() {
List<int> angka = [1, 2, 3];
// angka.add('empat'); // ERROR: String tidak boleh masuk List<int>
var campuran = [1, 'dua', true]; // List<Object>, dihindari
print(campuran);
}Menulis List<int> membuat Dart menjaga isinya: salah memasukkan tipe langsung ditolak saat compile. Kebiasaan baik yang mencegah bug aneh.
Kesalahan umum
1. Index out of range
// SALAH
void main() {
var buah = ['apel', 'mangga'];
// print(buah[5]); // ERROR: RangeError
}// BENAR: selalu cek batas
void main() {
var buah = ['apel', 'mangga'];
int i = 1;
if (i < buah.length) {
print(buah[i]);
}
}2. Lupa index mulai dari 0
void main() {
var buah = ['apel', 'mangga', 'pisang'];
print(buah[0]); // apel, BUKAN mangga
print('Elemen pertama: ${buah[0]}');
print('Elemen terakhir: ${buah[buah.length - 1]}');
}3. Mengira add() mengembalikan list baru
// SALAH: add mengubah list langsung, return-nya void
void main() {
var a = [1, 2];
// var b = a.add(3); // ERROR: add() tidak mengembalikan list
a.add(3);
print(a); // [1, 2, 3]
}Kesimpulan
List = wadah berurutan dengan index dari 0. Operasi dasar: akses [i], length, add, insert, remove. Selalu tulis tipe generiknya (List<String>) dan waspadai RangeError.
Catatan teknis: List literal
[1, 2, 3]bertipeList<int>yang fixed secara tipe tapi growable secara ukuran secara default. Ada jugaList.filled(3, 0)untuk list berukuran tetap berisi nilai awal.
Tantangan
Rapor mini
Diberi list nilai [80, 95, 70, 88], cetak: jumlah data, nilai pertama, nilai terakhir, dan rata-rata (jumlah semua dibagi length).
void main() {
var nilai = [80, 95, 70, 88];
// TODO
}