Что такое монадическая обработка ошибок? И почему это круто?
Очевидно использование монад для обработки ошибок. "Монада – это просто моноид в категории эндофункторов. Функтор – это гомоморфизм между категориями. А эндофунктор – это просто функтор, отображающий категорию на саму себя. "
По-моему уже этого достаточно, чтобы ответить на 2ой вопрос.
Объясните для человека не знакомого с функциональным программированием, в чем плюс отсутствия try-catch-finally.
Монада - это попытка обойти ограничения функционального программирования, выполнять последовательные операции, т.е. делать то, что делается при императивном подходе из коробки. Т.е. монада специфична для функционального, а try-catch-finally для императивного, и последний в первый никак не запихнуть, поэтому - монада.
Нет принципиальной разницы в этих методах обработки ошибок, ошибки идут отдельным потоком, разница лишь когда будет вызван обработчик.
Насколько я знаю, для монад есть еще один аргумент - это убирание обработки ошибок "под капот", т.е. мы видим решение только тест-кейса основной бизнес-логики, а тест-кейсы ошибок скрыты. Если говорить про ООП, там это не проблема, при подобном структурировании обработчик ошибок будет именно там, где и должен быть, к примеру, если мы говорим о "File not found", то в классе отвечающем за инфраструктуру и в бизнес-логике мы его не увидим. Кроме того, мы можем задать общий обработчик, а не писать всюду try catch. Что касается процедурного подхода, то наверное абсолютно все спрятать не получится, но если мы в 22 году пишем процедурно, у нас приоритет не структуризация, а производительность и здесь уже другие критерии.