dartlistcollectionMenengah4 mnt baca

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

dart
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:

dart
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

dart
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

dart
// SALAH
void main() {
  var buah = ['apel', 'mangga'];
  // print(buah[5]); // ERROR: RangeError
}
dart
// 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

dart
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

dart
// 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] bertipe List<int> yang fixed secara tipe tapi growable secara ukuran secara default. Ada juga List.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).

text
void main() {
  var nilai = [80, 95, 70, 88];
  // TODO
}