The OpenNET Project / Index page

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



"Релиз компилятора Rakudo 2022.02 для языка программирования Raku (бывший Perl 6)"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Доступны два режима работы форума: "Раскрыть нити" и "Свернуть нити".
. "Релиз компилятора Rakudo 2022.02 для языка программирования ..." +/
Сообщение от Аноним (50), 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.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Релиз компилятора Rakudo 2022.02 для языка программирования Raku (бывший Perl 6), opennews, 13-Фев-22, 10:34  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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