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
Bentuknya sama dengan akumulator: sisi kanan dihitung dengan nilai lama, lalu hasilnya menimpa nilai itu. Yang berbeda hanya cara menunjuknya.

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
scores.alex10
scores.budi20
keyalex
delta5

Keadaan awal. Dua kunci, dan yang akan disentuh hanya alex.

Langkah 1 dari 4
scores berisi alex 10 dan budi 20, key alex, delta 5. Perhatikan budi tidak pernah dibaca.

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.