Size: a a a

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

2020 November 06

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Да тут уже много философствовали на эту тему, но дефолтное определение "чистой" функции на мой взгляд все равно полезное
источник

ST

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

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Я бы сказал так, чистые функции не приводят к сюрпризам
источник

ST

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

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
В "хороших" языках не валится)
источник

MB

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

MB

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

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Sergey Trofimov
рекурсивная чистая функция валится со stackoverflow на большой коллекции — сюрприз 😊
чистая функция, которая создает объект, не вмещающийся в выделенную память — сюрприз 😊
источник

MB

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

MB

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

ST

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

MB

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

MB

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

MB

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

MB

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

MB

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

ST

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

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
что такое точка зрения чистоты функции?
источник

MB

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

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
что такое точка зрения чистоты функции?
ну вот я приводил пример
```
(def f [x] (print x) (inc x))
```
это функция, которая увеличивает на 1
ещё автор для каких-то целей добавил туда логирование
как должно поменяться моё отношение к данной функции от наличия в ней println?
источник