Size: a a a

Clojure — русскоговорящее сообщество

2020 November 06

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Какой смысл принтовать результат инкремента скажем?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
в том то и дело, что строгая трактовка есть
вопрос в полезности строгой трактовки
я не считаю, что нужно догматически читать эту строгую трактовку, иначе бы писал исключительно на хаскелях всяких)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Какой смысл принтовать результат инкремента скажем?
ну вот в практическую плоскость — я пишу приложение и собираю метрики где надо и не надо
и все функции выглядят так
(def f [x] (register-call 'f x) (inc x))
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Ну, есть просто набор "практик", которые помогают писать относительно легко понимаемый и поддерживаемый код
Ну и эти "практики" сходятся к функциональному программированию с чистыми функциями. Понятно, что в жизни приходится писать нечистые программы, но как-то люди видят профит в том, чтобы "нечистоты" оставить в небольшом количестве мест и как раз эти места тщательно тестировать
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
ну вот в практическую плоскость — я пишу приложение и собираю метрики где надо и не надо
и все функции выглядят так
(def f [x] (register-call 'f x) (inc x))
Все хорошо, можно не переживать)
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Mikhail Borisov
(def f [x] (set! #'clojure.core/+ *) (inc x)) а это чистая?
А вот здесь я бы начал переживать
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А вот здесь я бы начал переживать
здесь надо переживать не из-за нарушения чистоты, а из-за алгоритмического бреда, описанного такой реализацией
чистая функция должна делать то, что нужно, и не делать того, что не нужно
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Как кратко суммировать определение того "что делать нужно"?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А вот здесь я бы начал переживать
например это структурно ничем не отличается
(def f [x] (tap> x) (inc x))
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
что делает tap?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
что делает tap?
(defn tap>
 "sends x to any taps. Will not block. Returns true if there was room in the queue,
 false if not (dropped)."
 {:added "1.10"}
 [x]
 (force tap-loop)
 (.offer tapq (if (nil? x) ::tap-nil x)))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Как кратко суммировать определение того "что делать нужно"?
как кратко суммировать определение того, что нужно выделять в отдельную функцию? 😊
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Опять же, если это делается для дебага и мониторинга, ничего стремного
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
как кратко суммировать определение того, что нужно выделять в отдельную функцию? 😊
Зафакапить чистую функцию очень сложно
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
И очень легко проверить, правильно ли она работает
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Мб просто повезло не столкнуться с кейсами, когда мутирование приводит к багам, которые днями или неделями пытаешься отследить
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Зафакапить чистую функцию очень сложно
а функцию swap! легко зафакапить?
сложно ли проверить, правильно ли она работает?
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да, очень легко зафакапить
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Но это слишком простой пример
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
Да, очень легко зафакапить
пример можно? а то может я не понял, что такое зафакапить
источник