Ma'lumot turlari

Destrukturizatsiya

JavaScript'da ma'lumotlar ko'pincha massiv yoki obyektlarda saqlanadi. Destrukturizatsiya (destructuring assignment) โ€” bu massiv yoki obyektni alohida o'zgaruvchilarga bir satrda "ochib" olishning qulay usuli.

Massiv destrukturizatsiyasi

Massivni o'zgaruvchilarga ajratib olishga misol:

arr-destr.js
// natija shu yerda chiqadi

Endi arr[0] va arr[1] o'rniga ma'noli nomdagi o'zgaruvchilar bilan ishlaymiz. Bu shunchaki qisqartma โ€” asl massiv o'zgarmaydi.

"Destructuring" so'zi "buzish" degani emas. U massivni nusxa qilib o'zgaruvchilarga ko'chiradi, asl massivga tegmaydi.

Keraksiz elementlarni vergul bilan tashlab ketish mumkin:

skip-comma.js
// natija shu yerda chiqadi

Chap tomonda istalgan iterable tursa bo'ladi โ€” masalan, satrni ham ajratish mumkin:

str-destr.js
// natija shu yerda chiqadi

Standart (default) qiymatlar

Agar massivda o'zgaruvchilardan kamroq element bo'lsa, ortiqcha o'zgaruvchilar undefined bo'ladi. Buning oldini olish uchun standart qiymat berish mumkin:

default-values.js
// natija shu yerda chiqadi
Standart qiymat sifatida murakkab ifoda yoki hatto funksiya chaqiruvi ham berish mumkin. Ular faqat tegishli qiymat massivda bo'lmagandagina bajariladi.

Qiymatlarni almashtirish (swap)

Destrukturizatsiya yordamida ikki o'zgaruvchining qiymatini vaqtinchalik o'zgaruvchisiz almashtirish mumkin โ€” bu juda mashhur usul:

swap.js
// natija shu yerda chiqadi

Bu yerda o'ng tomonda vaqtinchalik [admin, mehmon] massivi yasaladi va darhol chap tomondagi o'zgaruvchilarga ajratib beriladi.

Qoldiq "...rest"

Agar massiv o'zgaruvchilardan uzun bo'lsa, qolgan barcha elementlarni bitta massivga yig'ib olish uchun ...rest ishlatiladi:

rest.js
// natija shu yerda chiqadi
...rest har doim eng oxirida turishi shart. [...boshi, oxirgi] ko'rinishida yozib bo'lmaydi โ€” bu xatolik beradi.

Obyekt destrukturizatsiyasi

Obyektlarni ham destrukturizatsiya qilish mumkin. Bu holda kvadrat qavs [] o'rniga jingalak qavs {} ishlatiladi va o'zgaruvchi nomlari kalitlarga mos bo'lishi kerak:

obj-destr.js
// natija shu yerda chiqadi

E'tibor bering: massivdan farqli o'laroq, obyektda tartib muhim emas. O'zgaruvchi nomi kalitga mos kelsa bo'ldi.

Yangi nom berish

Agar o'zgaruvchiga kalitdan boshqa nom bermoqchi bo'lsak, kalit: yangiNom sintaksisidan foydalanamiz:

obj-rename.js
// natija shu yerda chiqadi

Yangi nom va standart qiymatni birga ishlatish ham mumkin:

obj-rename-default.js
// natija shu yerda chiqadi

Ichma-ich (nested) destrukturizatsiya

Agar obyekt ichida boshqa obyekt yoki massiv bo'lsa, tuzilmani takrorlab, ichki qiymatlarni ham ajratib olish mumkin:

nested-destr.js
// natija shu yerda chiqadi
olcham va ranglar nomlari bu yerda o'zgaruvchiga aylanmaydi โ€” ular faqat ichkariga "kirish" uchun ishlatiladi. Faqat eng ichki qiymatlar o'zgaruvchi bo'ladi.

Funksiya parametrlarida destrukturizatsiya

Destrukturizatsiyaning eng foydali qo'llanilishlaridan biri โ€” funksiya ko'p parametr olganda. Agar ularni bitta obyekt sifatida uzatsak, funksiya ichida ularni qulay ajratib olamiz:

func-params.js
// natija shu yerda chiqadi

Bu usul "nomlangan argumentlar" (named arguments) ta'sirini beradi โ€” chaqirishda argumentlar tartibini eslab qolish shart emas, faqat kerakli kalitlarni ko'rsatamiz.

Oxiridagi = {} juda muhim: u funksiya hech qanday argumentsiz chaqirilganda ham xatolik bermasligini ta'minlaydi. Aks holda menyuYasa() chaqiruvi undefinedni destrukturizatsiya qilishga urinib xatolik beradi.

Xulosa