Map, data yang ditunjuk dengan nama
Bukan nomor urut, melainkan nama. Dan menulis nama yang belum ada justru menambahkannya.
Sebaiknya baca lebih dulu: Menunjuk elemen lewat nomornya.
Loker bernama
Struktur seperti itu disebut map. Isinya pasangan kunci dan nilai, dan yang menunjuk isinya adalah kuncinya, bukan posisinya.
SET scores[key] = scores[key] + delta OUTPUT scores
Tiga perbedaan yang punya akibat
- Kuncinya teks, bukan nomor urut. Tidak ada kunci pertama dan tidak ada kunci terakhir.
- Urutan kunci tidak dijamin. Menelusuri map dua kali boleh menghasilkan urutan berbeda, jadi jangan pernah bergantung padanya.
- Menulis ke kunci yang belum ada MENAMBAHKAN kunci itu. Ini berbeda dari array berindeks, yang menolak indeks di luar rentang.
IngatMembaca kunci yang belum ada adalah masalah. Menulis kunci yang belum ada tidak, sebab ia menciptakannya.
Ketidaksimetrisan itu sumber banyak bug dan sekaligus sumber banyak kode yang ringkas. Bandingkan dengan array berindeks pada pelajaran 4.1: di sana indeks di luar rentang ditolak dua arah, baik dibaca maupun ditulis. Pada map, hanya arah baca yang bermasalah.
Kunci lain tidak boleh tersentuh
Menyusun ulang seluruh map
SET hasil = {} FOR EACH k IN scores IF k == key SET hasil[k] = scores[k] + delta END END
Menyentuh satu kunci saja
SET scores[key] = scores[key] + delta
Kolom kiri kehilangan seluruh kunci lain, sebab hanya kunci yang cocok yang ia salin ke hasil. Bahkan bila cabang penyalinnya dilengkapi, ia tetap menelusuri seluruh map untuk mengubah satu nilai. Kolom kanan menunjuk kuncinya langsung, dan kunci lain tidak pernah dibaca sehingga tidak mungkin berubah. Kemampuan menunjuk langsung inilah alasan map ada.
Melihat satu kunci berubah
SET scores[key] = scores[key] + delta OUTPUT scores
Keadaan awal. Dua kunci, dan yang akan disentuh hanya alex.
Delta yang tidak menambah
- Delta nol: nilainya tidak berubah, tetapi penugasannya tetap terjadi. Sepuluh ditambah nol tetap sepuluh.
- Delta negatif: nilainya berkurang. Sepuluh ditambah negatif sepuluh menghasilkan nol, dan nol adalah nilai yang sah.
- Nilai nol bukan berarti kuncinya hilang. Kunci yang bernilai nol tetap ada di dalam map.
Butir terakhir pantas dipegang. Ada dan bernilai nol adalah dua hal berbeda dari tidak ada. Membedakan keduanya akan menjadi inti pelajaran berikutnya, tempat kunci yang belum ada harus disiapkan lebih dulu sebelum dibaca.
Periksa pemahaman
scores berisi a 1, b 2, c 3, d 4. Setelah kunci c ditambah 100, apa yang berubah?
Ringkasan
- Map menunjuk isinya lewat kunci teks, bukan lewat posisi.
- Urutan kunci tidak dijamin, jadi jangan pernah bergantung padanya.
- Menulis kunci yang belum ada menambahkannya. Membaca kunci yang belum ada bermasalah.
- Menyentuh satu kunci tidak pernah mengubah kunci lain.
- Sisi kanan dihitung dengan nilai lama, sama seperti akumulator.
- Kunci yang bernilai nol tetap ada. Ada dan bernilai nol berbeda dari tidak ada.