Fork me on GitHub
#clojure-italy
<
2016-09-07
>
reborg13:09:26

Interessante il meetup ieri sera riguardo pattern matching in Clojure. https://skillsmatter.com/skillscasts/7854-london-clojurians-meetup#video

reborg13:09:08

continuo a pensare che ci sono poche aree di nicchia che beneficiano effettivamente di qualcosa tipo https://github.com/missingfaktor/akar

reborg13:09:09

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’)

nilrecurring16:09:02

@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

nilrecurring16:09:16

l'ha spiegato meglio a voce probabilmente?

nilrecurring16:09:12

btw ho core.match in produzione solo su uno use case, ed è il dispatching degli eventi che arrivano su sente (websocket)

nilrecurring16:09:16

qualcosa tipo:

nilrecurring16:09:23

(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)))

nilrecurring16:09:17

l'alternativa è usare defmethod, che trovo molto più verboso

reborg16:09:39

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”))

nilrecurring16:09:27

Il condp va solo sul primo livello, con match fai match e binding di cose innestate

nilrecurring16:09:58

E.g. [:some/event {:id id}] -> ho id già bindato

reborg16:09:08

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

nilrecurring17:09:39

Probabilmente il valore aggiunto non c'è e mi risulta solo più leggero cognitivamente pensarla in pattern matching 🙂

nilrecurring17:09:33

Più tardi riscrivo il pezzo di applicazione vera con condp e vedo se mi piace (quello che ho postato era un esempio ridotto)

nilrecurring17:09:27

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

nilrecurring17:09:12

E questa cosa succede anche per una questione di peso cognitivo: pensare a una astrazione a cui non sei abituato non è immediato