I'd suggest avoiding macros until you absolutely know that you need them. 
Usually they aren't necessary.

Prefer writing pure functions (without side effects) - these are easier to 
reason about, easier to test, simpler to write correctly and easier to plug 
together / compose via higher order functions.

For example, in your endpoint example I would probably just use three 
functions:
- a pure "add endpoint metadata to an endpoint map" function
- an impure "update endpoints" function that updates endpoints using an 
endpoint map
- a function that calls both of the above to declare and launch a new 
endpoint

There might be a few other helper functions as well but hopefully you get 
the idea.

On Thursday, 8 August 2013 03:19:15 UTC+1, Jace Bennett wrote:
>
> Thanks to the community for a wondrous programming environment. I 
> discovered SICP last year, and fell in love with the idea of lisp. But I've 
> come to a point where I think I need practice on moderately sized projects 
> before more reading will help.
>
> When starting on almost any moderately scoped effort, I quickly run into a 
> class of problems which I think may be a fit for macros, but I want to 
> understand what is the idiomatic way to approach them in clojure.
>
> Most of my professional experience is in .NET, and that is probably 
> coloring my thought patterns a bit. In that context, I often use reflection 
> scans and type metadata to configure infrastructural bits and dry things 
> up. Instead of having to explicitly register components in the more dynamic 
> areas of my app, I use conventions to select components to register from 
> the metadata I have about my code.
>
> I can imagine using macros in clojure to accumulate metadata about my 
> declarations so that I can query them at runtime. For example, maybe a 
> "defendpoint" macro that sets up a handler AND adds it to the routing table 
> (or more directly an "endpoint map" which I then use to make routing 
> decisions among other things).
>
> Admittedly, something about the sound of the phrase "it's just data" tells 
> me I'm sniffin up the wrong tree here. But I don't know how to turn that 
> nagging feeling into working code.
>
> Is this a reasonable use of the macro? What about doing the registration 
> at macro-expansion time vs emitting runtime code to do it? How should one 
> approach the problems space otherwise?
>
> Thanks for your time.
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to