This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-09-07
Channels
- # admin-announcements (2)
- # arachne (1)
- # bangalore-clj (2)
- # beginners (39)
- # boot (349)
- # cider (31)
- # clara (2)
- # cljs-dev (9)
- # cljsjs (67)
- # cljsrn (7)
- # clojure (300)
- # clojure-art (4)
- # clojure-greece (11)
- # clojure-hk (3)
- # clojure-israel (1)
- # clojure-italy (17)
- # clojure-japan (1)
- # clojure-russia (33)
- # clojure-sg (2)
- # clojure-spec (41)
- # clojure-uk (86)
- # clojurescript (123)
- # clojurex (3)
- # code-reviews (1)
- # component (6)
- # crypto (1)
- # cursive (36)
- # datomic (32)
- # devcards (3)
- # emacs (11)
- # events (3)
- # funcool (4)
- # luminus (10)
- # om (28)
- # onyx (88)
- # pedestal (2)
- # re-frame (84)
- # reagent (7)
- # ring-swagger (3)
- # specter (33)
- # sql (2)
- # vim (21)
Interessante il meetup ieri sera riguardo pattern matching in Clojure. https://skillsmatter.com/skillscasts/7854-london-clojurians-meetup#video
continuo a pensare che ci sono poche aree di nicchia che beneficiano effettivamente di qualcosa tipo https://github.com/missingfaktor/akar
nei dettagli del talk poi, secondo me sono mancati esempi calzanti del perche’ dovrei usare patter matching in Clojure (almeno, a me non hanno convinto granche’)
@reborg nonostante abbia letto questo: https://github.com/missingfaktor/akar/blob/master/FAQs.md#q-how-does-akar-compare-with-corematch non capisco perchè dovrei usarlo al posto di core.match
l'ha spiegato meglio a voce probabilmente?
btw ho core.match in produzione solo su uno use case, ed è il dispatching degli eventi che arrivano su sente (websocket)
qualcosa tipo:
(defn event-handler [event data]
(match event
[:chsk/state state]
(let [[old-state-map new-state-map] (have vector? data)
state-changed? (->> data (map :open?) (apply not=))
new-state (:open? new-state-map)]
(when state-changed?
(dispatch [:set-offline-status new-state])))
[:chsk/handshake _]
(info "Handshake:" data)
[:chsk/recv event-from-server]
(match event-from-server
[:some/test payload]
(info "Received test event:" payload)
:else (info "Unmatched push event from server:" event-from-server))
:else (info "Unmatched event:" event)))
l'alternativa è usare defmethod
, che trovo molto più verboso
nilrecurring che vantaggi vedi rispetto a quello che hai postato rispetto a
(defn event-handler [[k v] data]
(condp = k
:chsk/state "1"
:chsk/hadnshake "2"
:chsk/recv "3"
"4”))
Il condp
va solo sul primo livello, con match
fai match e binding di cose innestate
E.g. [:some/event {:id id}]
-> ho id già bindato
non riesco a vedere il valore aggiunto… oppure c’e’ ma e’ minimale. Devo pero’ studiare un po’ di piu’ a riguardo quindi potrei non saperne abbastanza
Probabilmente il valore aggiunto non c'è e mi risulta solo più leggero cognitivamente pensarla in pattern matching 🙂
Più tardi riscrivo il pezzo di applicazione vera con condp e vedo se mi piace (quello che ho postato era un esempio ridotto)
Comunque alla fine programmiamo tutti in modo diverso anche perchè abbiamo diverse astrazioni in testa, che è il motivo per cui possono esistere (e convivere) decine di implementazioni della stessa cosa, ad un livello di astrazione leggermente diverso
E questa cosa succede anche per una questione di peso cognitivo: pensare a una astrazione a cui non sei abituato non è immediato