Этот пост был первоначально опубликован на Мой Github Pages Site 16 сентября 2017
Это может звучать немного надлежащим или смешным, но я редко пишут петли в настоящее время. То, что я нашел, заключается в том, что только каждый язык программирования включает в себя набор методов или применимых функций, которые могут заменить практически во всех цикле, которые я ранее пишут. Эти Функции высшего порядка называются картой, фильтром и сложите.
В предыдущих двух статьях мы получили представление о силе функций карты и фильтра. В этой статье я хочу обсудить мА герпенов итеративных функций: функцию сгиба и, надеюсь, передают важность этой функции.
Имейте в виду, что сгибается, как правило, не называется складкой в языках программирования. Это верно для JavaScript, где Fold называется уменьшением. В этой статье я буду ссылаться на функцию сгиба, но примеры покажутся Array.Prototype.recuce
Отказ Тип массива в JavaScript называется Складной Потому что это реализует, как Array.Prototype.recuce
Отказ
Складывать
Слома принимает функцию аккумулятора, которая применяется к каждому элементу в массиве и передает результат к следующему исполнению аккумулятора. Сгиб принимает необязательное значение семени для использования в качестве отправной точки для вашей складки. Это довольно сложно для меня выражать словами, поэтому вот схема: Здесь F
это функция аккумулятора. Обратите внимание, что каждый экземпляр F
Имеет две стрелки, указывающие на него. Это означает, что функция аккумулятора, которую вы предоставляете, должны принимать два параметра: значение из последнего выполнения и текущее значение из массива. Как конвенция, я склонен использовать (Напоминание, значение)
как мои имена параметров.
Начать медленно
Я покажу несколько основных примеров и попытаюсь работать до некоторой более тяжелой складывания.
Это довольно круто, а? Может возникнуть на наличии некоторого взгляда на концепцию, но как только вы подумаете, вы захотите сложить все!
Мы добавили некоторые цифры. Большой Whoop. Почему вы так взволнованы о сложении?
Я рассмотрю сгибающуюся итеративную функцию. Колени пчелы, если вы будете. Причина, по которой я говорю это потому, что значение семян может быть любого типа . Это означает, что мы можем сложить массив и выгнать объект, массив, номер, строку, логию или все, что ваше сердце желает! Скажем, у нас есть массив пар, которые мы хотим транспонировать на объект, это легко сделать с помощью сгиба:
Два других итеративных функция, которые я покрыл, карта и фильтр, может быть легко реализован как функция складывания! Рассмотрим следующее:
Вот пример сгиба, используемый для сглаживания массива объектов в большой кусок текста CSV:
Ебена мать! Это потрясающе!
Я точно знаю!? Я не могу подчеркнуть, насколько это мощное преобразование этого массива.
Где следует использовать раздел?
Благодаря гибкому характеру сгиба, довольно сложно и ограничивает, чтобы сказать «определенно использовать его в Сценарий A или Сценарий B ». В основном, когда вы хотите накапливать элементы коллекции каким-то образом, сложите отличный инструмент для этого.
Так же, как карта и фильтр избегайте мутации исходного массива, так сложится. Это важно, потому что мы хотим преобразовать список с помощью сгиба, но мы также можем захотеть отобрать и фильтровать позже. Эта идея избежать мутирующих данных идет немного за пределами объема этой статьи, но я думаю, что Эрик Норманд и сделал отличную работу по объяснению, почему вы можете обратить внимание на данные как неизменную.
Какие языки складываются?
Те, которые я использую повседневную складку. Вот таблица тех, о которых я знаю о:
JavaScript | Array.prototype.recuce |
C # | Перечислимы. Совокупность (как часть системы. Linq) |
Haskell. | Foldl, FoldL1. |
Выступ | Array_reduce. |
Монгодб | $ Уменьшить (как часть конвейера агрегации) |
Есть определенно больше языков с функцией сгиба, запеченной, поэтому обязательно проверьте ваши локальные списки.
Оригинал: “https://dev.to/jreina/intro-to-the-fold-function-aka-reduce-or-aggregate”