This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-12-23
Channels
- # admin-announcements (95)
- # beginners (16)
- # boot (50)
- # cider (15)
- # cljs-dev (47)
- # clojure (149)
- # clojure-italy (5)
- # clojure-russia (94)
- # clojurescript (163)
- # clr (1)
- # cursive (6)
- # datavis (9)
- # editors-rus (4)
- # hoplon (24)
- # jobs (9)
- # ldnclj (32)
- # lein-figwheel (4)
- # mount (5)
- # off-topic (2)
- # om (68)
- # parinfer (31)
- # proton (1)
- # reagent (32)
- # remote-jobs (1)
- # yada (5)
утра! А поясните за кодстайл. Я видел не раз, как умные люди пишут на кложе функции по 30-50 строк (привет @nicola https://github.com/niquola/route-map/blob/master/src/route_map/core.cljc#L23-L49), в результате чего их сложно читать. В уютном руби я точно знал, что от такого нужно воротить нос, а тут я в замешательстве.
хм, тоже грешен - пишу большие функции и только когда вижу что могу что-то переиспользовать то выношу в отдельные функции и начиню шарить. Типа не канонично? Надо все мелкими делать сразу?
просто чем отличается в итоге
[let (f1 (fn…)
f2 (fn….)
…]
;; от
(defn f1 …)
(defn f2 … )
…
тестировать в репле одна фигня, тока разве что тест написать будет проще для ф1 ф2
еще вопрос по стилю: есть ли какой-то выработанный канон по форматированию кода в лиспах? прежде всего интересует идентация и рекомендации по переносу строки
@shinych: а какой редактор? emacs со smartparens сам как-то переносит и отступы делает, так что я о таком не думаю
кмк, если функция логически целостна и делает одно дело, её не надо разбивать, а молиться на "короткие функции" — это религия какая-то
а если эти три функции существуют только для того, чтобы удовлетворять требованию по кол-ву строк — непонятно зачем они
ну блядь, если ты напишешь 30 строк, ты автоматически сунешь туда столько действий, что их не охватить сразу
а мне кажется (в том числе и по поводу руби), что если у тебя эта функция делает одну вещь, и это не нужно в других местах, то можно и в 20 строк написать. 50 конечно перебор, но когда у тебя куча мелких методов – тоже читать тяжело. зависит от конкретной ситуации, короче.
в руби вон модно классы с одним методом call плодить. это модно, но не нормально, я считаю.
@larhat: в том-то и проблема, что редакторы в команде разные; кое у кого вообще редактор без идентатора автоматического. меня вполне устраивает, как курсив переносит, подумалось, что в emacs должно быть очень так же ) может есть где формальное описание
@shinych: а ты смотрел стайлгайды всякие? https://google.github.io/styleguide/lispguide.xml#Formatting
https://github.com/bbatsov/emacs-lisp-style-guide https://github.com/bbatsov/clojure-style-guide
> кмк, если функция логически целостна и делает одно дело, её не надо разбивать, а молиться на "короткие функции" — это религия какая-то Ромочка дело говорит вообще, в упомянутом руби просто религиозные фанатики повсюду с говнокодом
shinych: это автор cider. правила индентации cursive полностью соответствуют правилам clojure-mode. так что это просто стандарт де-факто
никто не смотрел - в теории advanced compilation должно ускорять ClojureScript так ведь?
хм, он Google Closure ведь многое инлайнит не?
artemyarulin: сорянчик, про инлайнинг не знал. тогда вообще может и ускорить, но я что-то сомневаюсь что как-то заметно. в8 и так инлайнит.
угу, я погуглил - где он быстрее делает, где наоборот замедляет. В общем не должен эффектить походу
http://stackoverflow.com/questions/8065903/does-google-closure-compiler-ever-decrease-performance вот тут хорошо написано
хоть ответу и 5 лет
А почему вот это считается very bad? https://github.com/bbatsov/clojure-style-guide/blob/master/README.md#dont-def-vars-inside-fns
а зачем это может понадобится?
@shinych: def объявит же в неймспейсе, и получится, что функция у тебя с диким сайд-эффектом
у нас такое делается в самом старте приложения (cljs), там, где файловая система инициализируется
ха, получается у вас тут mutable по сути но без атома, не думал раньше о таком применении
никто не подскажет - сделал я brew install boot-clj
, все ок. Запускаю boot -h
пишет Please download latest Boot binary:
wtf?
вродь все как в туториале
о, пойду в канале бута спрошу, забыл что он есть
https://www.dropbox.com/s/io4wubsoe1r6peg/Screenshot%202015-12-23%2017.43.30.png?dl=0
@konukhov: о спасибо, странно что в официальном гайде ничо нету про это
неа, не пробовал пока. Перечитываю ридми - мож я чо пропустил
я пальцем в небо, сейчас думаю, что в другом проблема. про энвы тут https://github.com/boot-clj/boot/wiki/Configuring-Boot
omg, с лейном проще блин
вообще, boot приятней, но я изрядно с ним проковырялся, когда, мне, например, надо было в зависимости от дева/прода, разные ресурсы подрубать.
там суть была в том, что нужно было сначала подрубить ресурсы и тд, а потом руками риквайрить сам апп уже
типа такого
`
(deftask require-app!
[]
(require '[billing-api.core])
identity)
(deftask setup-dev-mode
[]
(with-pre-wrap fileset
(set-env! :resource-paths #{"dev/resources" "resources"})
(environ :dev-mode true)
(require-app!)
fileset))
идея бута мне конечно больше нравиться - функции, а не декларации как в лейне, гибче да. Кста у меня все починилось апдейтом brew с последующим адейтом буута, видать старая версия просто была
блин тока счас узнал про deps.cljs (https://github.com/clojure/clojurescript/wiki/Packaging-Foreign-Dependencies) через него например все cljsjs пакеты работают
гг, я ж вчера писал — https://dl.dropboxusercontent.com/spa/agews4vz2srjde3/05buvhhe.png
да, но я подумал это магия этого cljsjs, а оказыветься этой фиче сто лет в обед. http://static.fjcdn.com/comments/But+heil+hitler+_bf16609affcf0302b5988091c036593c.jpg
re: форматирование: мы в команде используем https://github.com/weavejester/cljfmt/
ещё есть альтернативный взгляд на форматирование от Нолена — тупо делать отступ в два пробела
(хотя тут разговор про другие аспекты стиля шёл, прошу прощения, просканировал слишком быстро)