Тут пришла в голову мысль, что известные решения проблеммы спагеттизации асинхронного кода (написанного с callbacks/continuations/futures) приносят некоторые дополнительные изначально не очевидные проблемы.
Сценарий - коммуникация с сервером. В исходном варианте (со спагетти), имеем что-то вроде
SendRequest(request, processReplyFunction);
где processReplyFunction - функция, которая будет вызывана при получении ответа. Ну, там, это может быть не просто функция, а объект класса у которого вызовется виртуальная функция, или лямбда, всё что угодно, что можно вызывать и передать Reply - не суть.
И когда код превращается в череду вызовов таких колбеков - поддерживать его выходит сложновато.
Решение данной проблемы с помощью монад( Read more... )
Сценарий - коммуникация с сервером. В исходном варианте (со спагетти), имеем что-то вроде
SendRequest(request, processReplyFunction);
где processReplyFunction - функция, которая будет вызывана при получении ответа. Ну, там, это может быть не просто функция, а объект класса у которого вызовется виртуальная функция, или лямбда, всё что угодно, что можно вызывать и передать Reply - не суть.
И когда код превращается в череду вызовов таких колбеков - поддерживать его выходит сложновато.
Решение данной проблемы с помощью монад( Read more... )