Рубрики
Без рубрики

Монады для Java-программистов в простых терминах

Краткое описание монад в терминах, известных Java-программистам. С пометкой java, новички, учебник.

Слово Монада часто используется при упоминании или обсуждении функционального программирования. Существует несколько объяснений этого термина, но даже самые простые из них, как правило, объясняют его с использованием теории категорий или, по крайней мере, на базовом уровне функционального программирования.

Недавно я обнаружил для себя, что на самом деле все, что не нужно, монада может быть объяснена Java-программистам, используя только термины и понятия, с которыми они определенно знакомы. Объяснение не претендует на то, чтобы быть точным или абсолютно правильным. Его цель – обеспечить общее понимание.

Итак, что же такое монада?

Монада – это:

  • контейнер для некоторого значения (значений)
  • шаблон дизайна

Я думаю, что эта часть “контейнера” ясна. Итак, давайте перейдем к части “шаблон проектирования”.

Монада – это своего рода “инверсия контроля” по сравнению с неизменяемым POJO. Для POJO вы вызываете getter для извлечения значения и делаете с этим значением то, что хотите. POJO не имеет никакого контроля над этим использованием. Для монады вы предоставляете “функцию обработки” и передаете ее какому-либо методу монады. Результат обработки затем возвращается вызывающему абоненту в той или иной форме.

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

Например, он может избежать вызова обработки, если значение, хранящееся в монаде, на самом деле отсутствует ( Возможно монада).

Или применяйте обработку только в том случае, если сохраненное значение относится к определенному типу ( Либо монада), и опустите обработку в противном случае, и так далее, и тому подобное.

Обратите также внимание, что монада не предоставляет сохраненные значения напрямую (ни через геттер), в некоторых случаях это просто невозможно. Это делает некоторые реализации, например, представленные в Java 8 Необязательно не является полностью монадическим.

Оригинал: “https://dev.to/siy/monads-for-java-programmers-in-simple-terms-1959”