Pull to refresh

Comments 8

Итак, мы только вживую пронаблюдали, как очередной функциональный язык сам себе создал проблему из ничего, и героически её преодолел :)

Подозреваю, что это троллинг. Но попробую ответить серьезно для тех, кому действительно интересно, не занимаемся ли мы ерундой.

Спойлер: нет.

У нас была функция double -> UserId -> TransactionId option

продолжение:

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

Мы можем утонуть в обработке всех этих option условными выражениями или паттерн-матчингом, а можем извлечь утилитарную функцию andThen и пользоваться ее не только в этой конкретной задаче, а по всему проекту. При этом мы гарантированно знаем, как она работает, нам нет необходимости ее тестировать в каждому случае, в отличие от самописных обработок. То, что мы воспользовались функцией andThen накладывает дополнительное ограничение, мы не можем работать с несколькими объектами в месте ее вызова. Это решается при помощи специального инструмента computation expressions. Да мы написали немного лишнего кода, но его количество все равно меньше того, что нам пришлось бы писать во всех наших функциях.

Странно, сижу пишу краткое содержание 2х постов)

Это троллинг, но основание для него как мне кажется имеются.

Если задуматься, все эти телодвижения, описанные в статье нужны для казалось бы тупейшего действия - объявить переменную на стеке, чтобы потом передать её дальше по цепочке вызовов.

Для этого пришлось запилить целый отдельный синтаксис, который работает, если где-то там во глубине сибирских руд, кто-то реализует какие-то неведомые `computation expressions`.

А всё ради того чтобы один раз можно было не писать `if`.

Да вы издеваетесь?

Ну computation expressions и в c# есть свой, но что-то все часто используют и никто не против.

Используют для того, чтобы на стеке переменную объявить?

Смотря что реализовать.

Если в программе нужно написать тысячу if-ов, а вероятность ошибиться написав "is" вместо "is not" равна одной тысячной, то вероятность получить программу с ошибкой - больше 50%.

Sign up to leave a comment.

Articles