The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Релиз компилятора Rakudo 2022.02 для языка программирования ..."
Отправлено Аноним, 16-Фев-22 03:01 
Как в этой ветке модно спрашивать, вы точно функциональщик? :)

Давайте попробую объяснить, надеюсь будет полезно.

Если использовать flatten для "уплощения" вложенных списков - смысла жёстко связывать его с map действительно немного.

Но вот представьте такую ситуацию. У вас есть цепочка обработки данных из функций которые возвращают right-biased Either<Error, TypeN> (псевдоязык, похожий на Яву):

Either<Error, Type2> function1(Type1 data);
Either<Error, Type3> function2(Type2 data);
Either<Error, Type4> function3(Type3 data);
Either<Error, Type5> function4(Type4 data);

Вместо Either подойдёт и Optional<TypeN>, но с Either всё-таки лучше. Так вот, надо обработать данные по цепочке и прерваться на первой же ошибке, если она возникнет. Тогда можно всю цепочку написать следующим образом:

Either<Error, Type1> initialMonad = Right<Type1>(initialData)
Either<Error, Type5> resultMonad = initialMonad
  .flatMap(function1)
  .flatMap(function2)
  .flatMap(function3)
  .flatMap(function4)

Если бы function1..function4 возвращали бы просто Result1..Result4 без ошибок - хорошо подошёл бы простой map. Но так как каждая функция возвращает Either - то нужно этот Either автоматически распаковывать, что flatMap и делает. В этом случае flatMap - логически одна операция, поэтому и сделали flatMap, совмещающий map и flatten.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру