Ответы пользователя по тегу Функциональное программирование
  • Почему это не функция?

    Попробую сыграть в угадайку.
    1. Имеется в виду не "не функция", а "не чистая функция".
    2. toSlug1 использует throw чтобы сообщить об ошибке, что сложно отразить в контракте и оно добавляет нелинейность в код.

    Но тогда остаётся вопрос, почему toSlug2 назван чистой функцией, если catch у промиса такой же не обязательный.

    PS: посмотрел расшифровку речи спикера - он как раз об этом и говорит.
    toSlug1 не функция из-за того что у неё throw есть, а toSlug2 полностью линейный и детерминистический, без побочных эффектов.
    Ответ написан
    1 комментарий
  • Что такое монадическая обработка ошибок?

    Монадическая обработка ошибок - это когда для представления результата операции, которая может закончиться ошибок, используется монада. Например Either (aka Result).

    В Go хоть и нет try-catch, но и монадической обработки ошибок тоже нет.

    Главнаый смысл монад в том, что ты не можешь напрямую молча её распаковать.
    А ещё есть функция map() с помощью которой можно безопасно обработать успешный результат.

    Хорошие примеры языков с такой системой - Haskell, F#, Ocaml, Rust.

    Также советую посмотреть на railroad oriented programming, ссылку на которую скинул Александр Скуснов.
    Ответ написан
    Комментировать
  • Что такого хорошего в иммутабельности?

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

    Вот тупой пример:
    let today = now().date
    let tomorrow = today.addDays(1)
    assert(today != tomorrow)

    И вот если DateTime мутабельный, то мы можем словить ошибку в этой ситуации.
    Иммутабельность же позволяет на корню этого избежать.

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

    А отстутсвие сайд-эффектов позволяет делать вычисления ленивыми, и тоже даёт возможность безопасно распараллеливать, тк нет привязки к порядку операций.
    Ответ написан
    Комментировать