Writing code against an abstraction rather than against a concrete implementation is especially useful in ClojureScript, since the APIs can vary from browser to browser.
e On Thu, Mar 26, 2015 at 8:27 AM, Thomas Heller <[email protected]> wrote: > The general advice is to use Protocols if you need more than one > implementation of a function (ie. different targets). If there is only one, > use a function. > > I found myself always starting with a simple function and eventually > refactor to a protocol if needed (which is quite rare). It is generally > good practice to write functions in a way that take their "state" as the > first argument, which would also be the object the protocol would dispatch > on. So even if you switch to protocols the code using the function does not > need to change, if you treat the "state" in a somewhat opaque way. > > Hope that made sense. > > /thomas > > On Thursday, March 26, 2015 at 4:18:26 AM UTC+1, Michael McLellan wrote: > > I've recently been reading a lot about core.async and the different ways > it can be useful for building interactive/reactive interfaces. I was > reading through David Nolen's blog ( > http://swannodette.github.io/2013/08/17/comparative/) and the > corresponding code ( > https://github.com/swannodette/swannodette.github.com/blob/master/code/blog/src/blog/autocomplete/core.cljs) > and was confused by the of protocols here when setting up the DOM > modification functions. To me it seems like they could just be helper > functions, but I'm likely missing something. What is the advantage of > defining the protocols and extending the existing types? > > > > For a simple example of what I mean, I made a gist: > > https://gist.github.com/jmmk/54857dd919cb7ff70086 > > > > One has simple functions hide! and show! that modify an element, and the > other defines the protocol and extends the HTMLElement to include -hide! > and -show!. What are the tradeoffs here? > > -- > Note that posts from new members are moderated - please be patient with > your first post. > --- > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/clojurescript. > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
