Di elixir kami memiliki Maps:
> map = %{:a => "one", :b => "two"} # = %{a: "one", b: "two"}
> map.a # = "one"
> map[:a] # = "one"
Kami juga memiliki Daftar Kata Kunci:
> kl = [a: "one", b: "two"] # = [a: "one", b: "two"]
> kl2 = [{:a, "one"},{:b, "two"}] # = [a: "one", b: "two"]
> kl == kl2 # = true
> kl[:a] # = "one"
> kl.a # = ** (ArgumentError)
Mengapa keduanya?
Sintaksis? Apakah karena Daftar Kata Kunci memiliki sintaks yang lebih fleksibel yang memungkinkannya untuk ditentukan tanpa tanda kurung dan bahkan tanpa tanda kurung sebagai parameter terakhir dari panggilan fungsi? Lalu mengapa tidak memberi Maps gula sintaksis ini?
Kunci Duplikat? Apakah karena Daftar Kata Kunci dapat memiliki kunci duplikat? Mengapa Anda menginginkan akses gaya Peta dan kunci duplikat?
Performa? Apakah karena Daftar Kata Kunci memiliki kinerja yang lebih baik? Lalu kenapa punya Maps? Dan bukankah peta lebih baik dalam mencari anggota dengan kunci daripada daftar tupel?
Penampilan seperti JS Array dan Ruby Hash? Itu saja?
Saya memahami bahwa secara struktural mereka adalah representasi data yang berbeda. Bagi saya, tampaknya Daftar Kata Kunci di elixir berfungsi untuk memperumit bahasa melalui sintaksis yang luar biasa (3 varian sintaksis yang berbeda), kasus penggunaan yang tumpang tindih dengan peta, dan manfaat yang tidak jelas.
Apa keuntungan menggunakan Daftar Kata Kunci?
Manfaat utama daftar kata kunci adalah kompatibilitas mundur dengan basis kode elixir dan erlang yang ada.
Mereka juga menambahkan gula sintaks jika digunakan sebagai argumen fungsi yang menyerupai misalnya sintaks ruby:
Kelemahan utama penggunaan daftar kata kunci adalah tidak mungkin melakukan pencocokan pola parsial pada daftar tersebut:
Mari kita kembangkan ke argumen fungsi. Bayangkan kita perlu menangani fungsi multiklause berdasarkan nilai dari salah satu opsi:
Ini tidak akan pernah mengeksekusi
do_special_thing
:Dengan argumen peta, ini akan berfungsi:
sumber
Peta hanya mengizinkan satu entri untuk kunci tertentu, sedangkan daftar kata kunci memungkinkan kunci tersebut diulang. Peta efisien (terutama saat mereka tumbuh), dan mereka dapat digunakan dalam pencocokan pola Elixir.
Secara umum, gunakan daftar kata kunci untuk hal-hal seperti parameter baris perintah dan untuk menyebarkan opsi, dan gunakan peta (atau struktur data lain, HashDict) saat Anda menginginkan array asosiatif.
sumber