Size: a a a

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

2020 February 28

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
вот там на 12 странице!
источник

T

The2lb3oz4dr10½grOfHedgehogs in Clojure — русскоговорящее сообщество
Спасибо, прочитаю
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
более читаемо разбить на функции
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
и похоже update-in напрашивается
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
Sergey Trofimov
и похоже update-in напрашивается
в result нету :address, update-in не подойдет
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
твой if-let можно записать как
  (or
   (->>
     (get-in value [:organization :resource :address])
     (some #(when (#{"physical"} (:type %)) %))
     (:text))

   (->> (get-in value [:organization :resource :address])
     (some #(when (#{"postal"} (:type %)) %))
     (:text)))
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
->> можно записать как some->>
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
Sergey Trofimov
твой if-let можно записать как
  (or
   (->>
     (get-in value [:organization :resource :address])
     (some #(when (#{"physical"} (:type %)) %))
     (:text))

   (->> (get-in value [:organization :resource :address])
     (some #(when (#{"postal"} (:type %)) %))
     (:text)))
точно.
а имеет смысл get-in запихивать в отдельную функу  и ее вызывать ради 2х случаев?
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
точно.
а имеет смысл get-in запихивать в отдельную функу  и ее вызывать ради 2х случаев?
имеет
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Денис Нибаев
точно.
а имеет смысл get-in запихивать в отдельную функу  и ее вызывать ради 2х случаев?
получится и короче, и более читаемо, и эту функцию ты можешь отладить/протестировать отдельно
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
> Как думаете, почему в кложуре сделано не так же?
будет не код, а минное поле. Сейчас если не указал аргумент, компилятор ругнется. А если смолчит, то бахнет совсем в другом месте.
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
спасибо, я попробую
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ты вычислил число, а на самом деле это функция, из-за того, что не указал аргумент. Потом передал его десять раз в словаре, и кто-то прибавил к нему число, а там функция. Хорошей отладки.
источник

ST

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

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
Денис Нибаев
В продолжение моего вопроса. Можно ли это укоротить? Или так более читаемо?
(assoc result :address 
 (if-let
   [physical (->>
   (get-in value [:organization :resource :address])
   (some #(when (#{"physical"} (:type %)) %))
   (:text))]
   
   physical
   
   (->> (get-in value [:organization :resource :address])
   (some #(when (#{"postal"} (:type %)) %))
   (:text))))
Жесть какая-то... Причем, дублированная...
  (let [m (group-by (comp keyword :type)
                   (get-in value [:organization :resource :address]))]
   (-> (or (:physical m) (:postal m)) first :text))
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
С предложением выносить функции уже похоже на квест угадай  автора по рекомендации
источник

ДН

Денис Нибаев in Clojure — русскоговорящее сообщество
Andrey Ivanov
Жесть какая-то... Причем, дублированная...
  (let [m (group-by (comp keyword :type)
                   (get-in value [:organization :resource :address]))]
   (-> (or (:physical m) (:postal m)) first :text))
В практической clojure только месяц, поэтому и спрашиваю) спасибо за ещё вариант, с group-by ещё не встречался
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
(if-let [хрень (калкулэйтед-хрень)] хрень другая-хрень) =>
(or (калкулэйтед-хрень) другая-хрень)
источник