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:
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:
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:
Bu yerda func.length โ funksiyaning e'lon qilingan argumentlari soni. Agar to'plangan argumentlar shu songa yetsa, funksiya chaqiriladi.
...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:
Xulosa
- Karrilash
f(a, b, c)nif(a)(b)(c)ga aylantiradi, funksiyani o'zgartirmaydi; - Asosiy foydasi โ qisman qo'llash: argumentlarni oldindan qotirib, yangi funksiya olish;
- Ilg'or
curryyordamchisi ikkala chaqirish uslubini ham qo'llab-quvvatlaydi; - U
func.lengthga tayanadi, shuning uchun qat'iy argumentli funksiyalar uchun mos; - Amaliy qo'llanishi: sozlanadigan log, formatlash, tayyor filtrlar.