This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-05-09
Channels
- # admin-announcements (6)
- # arachne (3)
- # beginners (66)
- # boot (84)
- # braveandtrue (1)
- # cider (84)
- # cljs-site (1)
- # cljsjs (3)
- # cljsrn (2)
- # clojure (138)
- # clojure-austin (2)
- # clojure-czech (1)
- # clojure-gamedev (6)
- # clojure-germany (15)
- # clojure-italy (2)
- # clojure-russia (26)
- # clojure-uk (51)
- # clojurescript (97)
- # css (1)
- # cursive (1)
- # datascript (13)
- # datomic (6)
- # devcards (2)
- # docker (1)
- # emacs (5)
- # hoplon (9)
- # immutant (5)
- # jobs (4)
- # leiningen (6)
- # luminus (27)
- # mount (4)
- # om (16)
- # om-next (4)
- # onyx (15)
- # other-languages (36)
- # overtone (1)
- # proton (3)
- # quil (1)
- # re-frame (11)
- # reagent (24)
- # rum (4)
- # spacemacs (3)
подскажите что хорошего почитать по организации dataflow в clojure для начинающих: если использую reduce, надо протягивать структуру данных вниз, что не нравится (повышает coupling, что по старой привычке не хорошо), мапа же в принципе работает, но тогда у меня получается дикая вложенность структур самих данных, (типа лист мап листов мап) когда это совершенно не нужно и как с этим бороться не очень понятно. и вообще как правильно. 4clojure хороший ресурс но у него упор на отдельные функции, с dataflow в реальных приложениях не очень
@andmed: а какие подходы в организации dataflow ты используешь в неclojure ? ну и, желательно, какой-то пример задачи, в которой у тебя получается дикая вложенность. если задача действительно требует сложных структур данных, тогда можно посмотреть в сторону https://github.com/nathanmarz/specter, но чаще всего нужно разделить одну задачу на кучу меньших и решать большую задачу композицией мелких.
как вариант можно убрать вложенность и сделать более плоской (нормализация это называется или это вроде другое?)
(def data {:order {:products {:id 1 :v 2}}})
;; or
(def data {:order [:products/by-id 1]
:products/by-id {:id 1 :v 2}})
А что нынче в моде по холивару defrecord vs простой hashmap.
hashmap
@bernik: из некложи у меня только ооп. там другие подходы: вызываем метод на объекте, ручками обрабатываем в самой процедуре. ни map ни reduce. dataflow отсутствует, а coupling не поощеряется
@andmed: map и reduce это всего лишь частные случаи foreach-ей в твоем ооп коде. в ооп-мире принято, на каждое преобразование писать foreach. в фп-мире для каждого преобразования есть своя функция, из них три главные: * map - если хочется как-то изменить каждый элемент коллекции * filter - если надо отфильтровать элементы коллекции * reduce - если надо получить результат от коллекции вцелом. например, посчитать количество элементов, сгруппировать элементы, отсортировать. не знаю как понятней описать.
@andmed: на самом деле, reduce можно использовать и как map, и как filter. но, как говорится, можно и гвозди микроскопом забивать. по-другому переменные передаются - это да, есть отличия.
с reduce я могу гибче менять структуру данных. мапа навязывает свою структуру. ну пока так видится...
вот что-то про dataflow и хотелось почитать, с практическими примерами, фишками и гвоздями. про ФП и иммутабельными структурами, в идеале -- про кложу
@andmed: если тебе по задумке надо получить результат, который по структуре отличается от входной последовательности, тогда тебе нужен reduce, > мапа навязывает свою структуру не понял что ты имел в виду. для почитать могу посоветовать вот это, первые 6 глав, дальше идут монады-функторы-хиндли-милнеры, для начала может быть много. примеры на js-е https://drboolean.gitbooks.io/mostly-adequate-guide/content/index.html
@andmed: еще в закладках нашел статью, где показано как реализовать паттерны GoF на clojure в сравнении с java. http://mishadoff.com/blog/clojure-design-patterns/
про навязывание структуры мапой: например, где ожидаю получить мапу на выходе, получаю лист/вектор мап.. .и в таком духе. я наверно просто не умею еще деконструктить правильно, и поэтому думаю про reduce как способ главным образом контролировать выходную структуру..
@andmed: а, ну это просто чтение доков и, если доступны, примеров. http://clojuredocs.org/clojure.core/map
про паттерны, нельзя не вспомнить http://image.slidesharecdn.com/j6neru4mrj6ivbemoazk-signature-2dc2444de4bab674e57017541f6665ded1bda52727a96fc1951b3c3f5300cafc-poli-141124002944-conversion-gate02/95/functional-programming-patterns-buildstuff-14-13-638.jpg?cb=1421779239
я тоже хотел пошутить на эту тему, но серьезно: получается, вариантов сделать мульон, и гайды что @bernik дал выше про дизайн-паттерн полезны вдвойне. ок, ок, для начинающих
offtopic про ботов https://youtu.be/Rblb3sptgpQ
привет, может кто подскажет как обработать исключения postgres , такие как HTTP ERROR 500 ?