Преобразователи приходят на Clojure и Javascript


Были выпущены две новые библиотеки, добавляющие преобразователи в Clojure и JavaScript.

Преобразователь дает вам возможность работать с набором значений для получения нового значения или набора новых значений. Имя получено путем объединения преобразования и уменьшения, а преобразователь (используемый в контексте Clojure и JavaScipt) является преобразователем функции сокращения.

Преобразователь преобразует данные для получения одного значения из другого и уменьшает его в смысле объединения значений структуры данных для создания нового.

Функция уменьшения — это базовое преобразование; любое другое преобразование может быть выражено через него (карта, фильтр и т. д.).

В сообщении в блоге, описывающем, что делают преобразователи, Рич Хикки говорит, что преобразователи предоставляют лучший способ справиться с ситуациями, когда вам может потребоваться создать индивидуальные копии карт, фильтров и карт.

Хикки говорит, что функция сокращения — это как раз тот вид функции, которую вы передаете для уменьшения — она принимает уже достигнутый результат и новый ввод и возвращает следующий на данный момент результат. В контексте преобразователей лучше всего рассматривать это как:

;; уменьшение сигнатуры функции

что угодно, ввод -> что угодно

и что преобразователь — это функция, которая принимает одну уменьшающую функцию и возвращает другую:

;; подпись преобразователя

(что угодно, ввод -> что угодно) -> (что угодно, ввод -> что угодно)

Хики объясняет, что основная сила преобразователей проистекает из их фундаментальной развязки и что им все равно (или о чем они не знают):

выполняемая работа (что делает функция сокращения)

контекст использования (что такое «что бы то ни было»)

источник входных данных (откуда поступают входные данные)

Он объясняет эти идеи более подробно в Анатомии редуктора в блоге Clojure.

Поддержка преобразователей, которую Хики добавил в Clojure на Github, описывается как альфа-версия и может быть изменена.

Тем временем, вдохновленный мощью преобразователей, веб-разработчик Mozilla Джеймс Лонг написал свою собственную версию для JavaScript. В своем блоге, описывающем новую библиотеку, Лонг описывает преобразователи как умопомрачительные и говорит, что transducers.js позволяет создавать преобразования данных и применять их к любому типу данных, который вы можете себе представить.

Это подход, о котором стоит узнать, если вам нужен новый способ работы с данными.


Добавить комментарий