Вопрос тем, кто использует (изначально, преимущественно) не функциональные ЯП (C++, Java, Python). Как вы относитесь к CPS (Continuation-Passing Style)?
Для тех, кто не в курсе, например, есть некая операция, которая может завершиться удачно, а может с ошибкой, и вместо:
Result performOperation()
{
return doOperation();
}
...
Result result = performOperation();
if (OK == result)
{
std::cout << "OK" << std::endl;
}
else
{
std::cout << "NOK" << std::endl;
}
Делается так:
void performOperation(Func onSuccess, Func onFailure)
{
if (OK == doOperation())
{
onSuccess();
}
else
{
onFailure();
}
}
...
performOperation([]() {
std::cout << "OK" << std::endl;
},
[]() {
std::cout << "NOK" << std::endl;
});
Заранее пардон, если какие-то синтаксические ошибки, это чисто концептуальные примеры.
Даже предлагаю варианты ответов:
-
Код с этими лямбдами сложно понимать, всегда объявляю все функции и методы по-старинке, вызываю явно в императивном стиле;
-
Да, только так и делаю. Умные люди придумали ФП не просто так и гораздо нагляднее, не то, что у дурачков с императивной лапшой;
-
Мне всё равно, могу/делаю и так, и сяк.