Qo'shimcha mavzular

Karrilash (Currying)

Karrilash (currying) โ€” f(a, b, c) ko'rinishida chaqiriladigan funksiyani f(a)(b)(c) ko'rinishida chaqiriladigan qilib aylantirish usuli. Bu funksiyani "o'chirmaydi", faqat qayta o'raydi. U qisman qo'llash (partial application) uchun juda qulay.

Oddiy misol

Ikki argumentli funksiyani qo'lda karrilaymiz:

curry-oddiy.js
// natija shu yerda chiqadi

karrilangan(1) chaqirilganda argument "eslab qolinadi" va yangi funksiya qaytadi. Keyin (2) chaqirilganda haqiqiy hisob amalga oshadi.

Qisman qo'llash

Karrilashning asosiy foydasi โ€” funksiyani qisman chaqirib, oldindan sozlangan yangi funksiya olish:

curry-qisman.js
// natija shu yerda chiqadi
ikkiBarobar โ€” birinchi argumenti 2 deb qotirilgan yangi funksiya. Bu qisman qo'llash: funksiyaning bir qismini oldindan to'ldirib qo'yamiz.

Ilg'or curry yordamchisi

Amaliy curry odatda ikkala ko'rinishda ham chaqirilishga ruxsat beradi: curry(f)(a)(b)(c) ham, curry(f)(a, b, c) ham. Agar yetarli argument berilsa, funksiya darhol chaqiriladi; aks holda kutuvchi funksiya qaytadi:

curry-universal.js
// natija shu yerda chiqadi

Bu yerda func.length โ€” funksiyaning e'lon qilingan argumentlari soni. Agar to'plangan argumentlar shu songa yetsa, funksiya chaqiriladi.

Bu ko'rinishdagi karrilash faqat qat'iy sondagi argumentli funksiyalar uchun ishlaydi. ...rest parametrli yoki noaniq argumentli funksiyalarda func.length to'g'ri hisoblanmaydi.

Amaliy foyda: log funksiyasi

Karrilashning klassik amaliy misoli โ€” sozlanadigan log funksiyasi. Vaqt, jurnal darajasi va xabarni oladigan funksiyani karrilaymiz, so'ng ma'lum darajalar uchun tayyor funksiyalar yasaymiz:

curry-log.js
// natija shu yerda chiqadi
Karrilash sizga bitta umumiy funksiyadan maxsuslashtirilgan funksiyalar oilasini yasash imkonini beradi โ€” kodni takrorlamasdan.

Xulosa