Penugasan Destrukturisasi
Assignment destrukturisasi adalah cara cepat untuk mengekstrak nilai dari sebuah tabel berdasarkan nama kunci atau posisinya pada tabel berbasis array.
Biasanya ketika Anda melihat literal tabel, {1,2,3}, ia berada di sisi kanan assignment karena merupakan nilai. Assignment destrukturisasi menukar peran literal tabel dan menaruhnya di sisi kiri pernyataan assignment.
Ini paling mudah dijelaskan dengan contoh. Berikut cara membongkar dua nilai pertama dari sebuah tabel:
thing = [1, 2]
[a, b] = thingprint a, bthing = [1, 2]
[a, b] = thingprint a, bDi literal tabel destrukturisasi, kunci mewakili kunci yang dibaca dari sisi kanan, dan nilai mewakili nama yang akan menerima nilai tersebut.
obj = { hello: "world" day: "tuesday" length: 20}
{hello: hello, day: the_day} = objprint hello, the_day
:day = obj -- OK untuk destrukturisasi sederhana tanpa kurungobj = { hello: "world" day: "tuesday" length: 20}
{hello: hello, day: the_day} = objprint hello, the_day
:day = obj -- OK untuk destrukturisasi sederhana tanpa kurungIni juga bekerja pada struktur data bertingkat:
obj2 = { numbers: [1, 2, 3, 4] properties: { color: "green" height: 13.5 }}
{numbers: [first, second], properties: {color: color}} = obj2print first, second, colorobj2 = { numbers: [1, 2, 3, 4] properties: { color: "green" height: 13.5 }}
{numbers: [first, second], properties: {color: color}} = obj2print first, second, colorJika pernyataan destrukturisasi kompleks, Anda bisa memecahnya ke beberapa baris. Contoh yang sedikit lebih rumit:
{ numbers: [first, second] properties: { color: color }} = obj2{ numbers: [first, second] properties: { color: color }} = obj2Umumnya mengekstrak nilai dari tabel lalu menugaskannya ke variabel local dengan nama yang sama dengan kuncinya. Untuk menghindari pengulangan, kita bisa menggunakan operator prefiks ::
{:concat, :insert} = table{:concat, :insert} = tableIni secara efektif sama seperti import, tetapi kita dapat mengganti nama field yang ingin diekstrak dengan menggabungkan sintaks:
{:mix, :max, random: rand} = math{:mix, :max, random: rand} = mathAnda bisa menulis nilai default saat destrukturisasi seperti:
{:name = "nameless", :job = "jobless"} = person{:name = "nameless", :job = "jobless"} = personAnda dapat menggunakan _ sebagai placeholder saat destrukturisasi list:
[_, two, _, four] = items[_, two, _, four] = itemsDestrukturisasi Rentang
Section titled “Destrukturisasi Rentang”Anda dapat menggunakan operator spread ... pada destrukturisasi list untuk menangkap rentang nilai. Ini berguna ketika Anda ingin mengekstrak elemen tertentu dari awal dan akhir list sambil mengumpulkan sisanya di tengah.
orders = ["first", "second", "third", "fourth", "last"][first, ...bulk, last] = ordersprint first -- prints: firstprint bulk -- prints: {"second", "third", "fourth"}print last -- prints: lastorders = ["first", "second", "third", "fourth", "last"][first, ...bulk, last] = ordersprint first -- prints: firstprint bulk -- prints: {"second", "third", "fourth"}print last -- prints: lastOperator spread dapat digunakan pada posisi berbeda untuk menangkap rentang yang berbeda, dan Anda bisa memakai _ sebagai placeholder untuk nilai yang tidak ingin ditangkap:
-- Tangkap semuanya setelah elemen pertama[first, ...rest] = orders
-- Tangkap semuanya sebelum elemen terakhir[...start, last] = orders
-- Tangkap semuanya kecuali elemen tengah[first, ..._, last] = orders-- Tangkap semuanya setelah elemen pertama[first, ...rest] = orders
-- Tangkap semuanya sebelum elemen terakhir[...start, last] = orders
-- Tangkap semuanya kecuali elemen tengah[first, ..._, last] = ordersDestrukturisasi di Tempat Lain
Section titled “Destrukturisasi di Tempat Lain”Destrukturisasi juga dapat muncul di tempat-tempat di mana assignment terjadi secara implisit. Contohnya adalah perulangan for:
tuples = [ ["hello", "world"] ["egg", "head"]]
for [left, right] in *tuples print left, righttuples = [ ["hello", "world"] ["egg", "head"]]
for [left, right] in *tuples print left, rightKita tahu setiap elemen pada tabel array adalah tuple dua item, sehingga kita dapat membongkarnya langsung di klausa nama pada pernyataan for menggunakan destrukturisasi.