Введення в каррінг в javascript

Читаність і гнучкість

Якщо ви стикалися з терміном каррінг раніше, але не знали, що він означає, то ви можете думати про це як про екзотичну і специфічною техніці, про яку вам не потрібно турбуватися. Але насправді каррінг це дуже проста концепція, вирішальна знайомі проблеми при роботі з аргументами функції, відкриваючи багато гнучких опцій для розробника.

Що таке каррінг?

Кажучи коротко, каррінг це спосіб конструювання функцій, що дозволяє часткове застосування аргументів функції. Це означає, що ви можете передати всі аргументи, очікувані функцією і отримати результат або передати частину цих аргументів і отримати назад функцію, яка очікує інші аргументи. Все просто насправді.

Ця функція для коректної роботи очікує в якості аргументів ім'я і вітання. Але ми можемо переписати її, використовуючи вкладене каррінг так, що базова функція буде вимагати тільки привітання і повертати іншу функцію, приймаючу ім'я людини, якого ми хочемо вітати.

Наше перше каррі

Це невелике поліпшення до способу написання функції дозволить нам створити нову функцію для будь-якого типу вітання і передати цю нову функції ім'я людини, якого ми хочемо вітати:

Ми також безпосередньо викликаємо оригінальну каррірованную функцію, просто передаючи кожен з параметрів в окремих круглих дужках один за іншим:

Карріруем все

Гарна новина полягає в тому, що вивчивши те, як можна модифікувати нашу традиційну функцію і використовуючи цей підхід для роботи з аргументами, ми можемо це робити з будь-якою кількістю аргументів.

У нас та ж сама гнучкість при роботі з чотирма аргументами, що й раніше при роботі з двома. Не має значення, наскільки глибоко вкладення, ми можемо створювати нові функції для привітання будь-якої кількості людей всіма доступними способами:

Чого ж більше, ми можемо передавати стільки параметрів, скільки хочемо при створенні варіантів нових функцій, які здатні приймати відповідну кількість додаткових параметрів, кожен з яких передається в окремих дужках:

І ми можемо з легкістю задавати підлеглі варіації:

Каррінг традиційних функцій

Ви можете бачити, наскільки потужний цей підхід, особливо якщо вам треба створити багато деталізованих кастомних функцій. Єдина проблема це синтаксис. При створенні каррірованних функцій вам треба зберігати вкладеність повертаються функцій і викликати їх за допомогою нових функцій, що вимагають численні набори дужок, в кожному з яких міститься свій ізольований аргумент. Це може стати заплутаним.

Одним із шляхів вирішення цієї проблеми є створення швидкої і брудною каррірующей функції, яка буде приймати ім'я існуючої функції, написаної без всіх вкладених повернень. Каррірующая функція повинна витягнути список аргументів для цієї функції і використовувати їх для повернення каррірованной версії оригінальної функції.

Щоб використовувати її, ми передаємо ім'я функції, що приймає будь-яку кількість аргументів разом з тими аргументами, які ми хочемо попередньо заповнити. Назад ми отримуємо функцію, яка очікує залишилися аргументи:

І так само, як і раніше, ми не обмежені в кількості аргументів, які хочемо використовувати при побудові похідних функцій з нашої оригінальної каррірованной функції:

серйозне каррінг

Наша невелика каррірующая функція не здатна обробити всі можливі ситуації типу відсутніх або опціональних параметрів, але вона робить осмислену роботу, поки ми дотримуємося суворого синтаксису при передачі аргументів.

Деякі функціональні бібліотеки, такі як Ramda мають більш гнучкі каррірующімі функціями, які можуть розділяти параметри, необхідні для функції і дозволяють передавати їх індивідуально або групами для створення каррірованних версій. Якщо ви хочете активно використовувати каррінг, то це, можливо, підійде вам.

Незалежно від того, чому ви вирішили додати каррінг до вашого арсеналу, чи віддаєте перевагу ви вкладені дужки або більш продуктивну каррірующую функцію, послідовне іменування каррірованних функцій допоможе вам зробити свій код більш читабельним. Кожна похідна функція повинна бути названа так, щоб було зрозуміло її поведінку і очікувані нею аргументи.

порядок аргументів

При каррінг функцій дуже важливо враховувати порядок аргументів. Використовуючи описаний підхід вам потрібно, щоб замінний аргумент був останнім серед аргументів, переданих в вихідну функцію.

Початковий облік порядку аргументів полегшить планування каррінг і застосування його в роботі. І облік порядку аргументів з точки зору ймовірності їх зміни це хороша звичка при проектуванні будь-яких функцій.

висновок

Схожі статті