Thanks for the reference Mark, much appreciated. 

I add the private meta-data by hand, but (defn- foo 2) is so much more succinct 
than (def ^:private foo 2) - where ^:private is almost half  the declaration. I 
also find the placement of the meta-data tag to be intrusive and disruptive 
when reading... but that's just a personal peccadillo. 

I find your comments that you don't feel as much need to mark defs as private 
as often as defns really interesting, because it is quite different to my own 
practice. I tend to look at ^:private primarily as a way to inform users of a 
namespace that this def is something they can safely ignore because it is an 
implementation detail; you only need to pay attention to this if you're going 
to modify the code. 

I've spent 5 mins looking at random source files from a few clojure projects 
and I seem to use more defs than most people. I tend to pull out a fairly high 
percentage of literals into expanatory defs, whereas the small sample of files 
that I trolled through seemed to have a different feel for the tipping point 
when a def is appropriate.

I am surprised at other comments in this chain where people would rather see 
the removal of def- than the addition of additional variants of def 
derivatives. I'm not arguing that I'm right, or that things should change, but 
personally I feel that controlling the exposed surface area of an API is 
crucial to comprehensibility and maintainability, and that making minimisation 
of surface area as trivial as possible will benefit us all. 

Thanks to everyone for taking the time to write down their thoughts,


R.


On 17 Sep 2011, at 16:37, Mark Rathwell wrote:

> A previous discussion on the topic can be found here [1].  You can
> easily add the private metadata yourself:
> 
> Clojure 1.2:  (def ^{:private true} size 25)
> Clojure 1.3:  (def ^:private size 25)
> 
> I think probably the reason against it is that generally there is not
> as much reason to use a constant, for example, outside of its
> namespace as there is with functions, and therefore more need for
> marking functions meant only for internal use as such (but that is
> just guessing at other peoples' thought processes).
> 
> [1] 
> http://groups.google.com/group/clojure/browse_thread/thread/80d873ef625221ac/243a0ad490150d3e?lnk=gst&q=def-#243a0ad490150d3e
> 
> 
> On Sat, Sep 17, 2011 at 10:54 AM, Rob Lally <rob.la...@gmail.com> wrote:
>> Hi all,
>> 
>> Whilst trying to minimise the visible surface areas of namespaces, I've 
>> often felt the need for a def- function/macro that marks a def'ed var with 
>> :private metadata. An analog of defn-, if you will.
>> 
>> Is there a reason that I shouldn't do this or a reason that it doesn't seem 
>> to be a member of the core lib?
>> 
>> In the spirit of Hunt & Thomas' "Select isn't broken", when I encounter 
>> something this trivial, useful and absent I tend to conclude that I'm the 
>> one who's got things wrong.
>> 
>> 
>> Thanks in advance,
>> 
>> 
>> Rob.
>> 
>> --
>> 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 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 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

Reply via email to