-- 
Kurt Harriger
Sent with Sparrow (http://www.sparrowmailapp.com/?sig)


On Saturday, June 16, 2012 at 3:07 PM, Kurt Harriger wrote:

> 
> 
> On Saturday, June 16, 2012 1:28:21 PM UTC-6, Vinzent wrote:
> > > I agree, an explicit type field makes dispatching easy.  However this 
> > > data structure returned by (http/get ... :as json) so if I want to add 
> > > type information I need to walk the tree and rewrite it.  Not necessarily 
> > > a bad idea, but in some cases the only thing I need is the eTag and so 
> > > the additional processing may in some cases unnecessary. One could easily 
> > > make data conversions lazy by doing something like (defrecord Contact 
> > > [contact]) (defmethod emails Contact [contact] (map map->Email (:emails 
> > > contact)) to delay the computation until the values are actually 
> > > requested.  However, note that emails is now a multimethod method not a 
> > > value and the consumer needs to use (emails contact) rather than (:emails 
> > > contact)... Thus as I was saying previously is that (def emails :emails) 
> > > gives you the flexibility to delay computation if desired.  
> > 
> > 
> > You have delays and lazy sequences for delaying computation.
> 
> This still requires changing your code to @(:emails contact).  If you use 
> (emails contact) you need change your code in only one place. 
> > 
> > > Clojure does not distinguish between properties and data representation 
> > > and these are NOT the same thing. 
> > 
> > Properties is OOP concept; clojure is not an object-orinted language.
> >  
> > >  There are many different ways to represent data. For example the area of 
> > > a shape can be represented in many different ways, square inches, square 
> > > miles, a rectangle, circles, polygons, or perhaps complex geometry 
> > > requiring calculus all of which could be asked what is your area in 
> > > square feet.  Area is a property of the object, the width, radius, number 
> > > of sides, etc is an implementation detail. 
> > > 
> > 
> > 
> > No, area is a function.
> 
> Property is just the OO word for function, semantically they are the same. OO 
> doesn't have functions they have properties and methods.  
>  
> >  
> > > You may then ask so why don't you just pass in {:area } as square feet 
> > > instead of the radius of the circle?  Because the value may not be used 
> > > by the function.  If its not used then why is it part of the contract?  
> > > Because it may be used conditionally, for example, maybe the function 
> > > needs to find the first shape that will fit within a region once that 
> > > limit is reached it no longer requires the area for any other shapes.  So 
> > > if the shape requires complex calculus which has been written in another 
> > > programming language and thus requires a rpc call to a network service to 
> > > compute the value that is only used sometimes seems wasteful and 
> > > inefficient if the value is only sometimes computed.  This example is 
> > > somewhat contrived, but it is not that different from what I am doing.
> > > 
> > 
> > 
> > If getting a 'property' requires such computations, then it's clearly 
> > should be a function.
> 
> Agree.  
> >  
> > > My point is that properties with getter functions allow you to defer 
> > > computation, keywords do not.  Keywords are not like java getters they 
> > > are like java fields.  
> > > 
> > 
> > 
> > Keywords are just one of clojure's data structures (see 
> > http://clojure.org/data_structures#Data Structures-Keywords 
> > (http://clojure.org/data_structures#Data+Structures-Keywords)) 
> >  
> > > Instead of (:property themap), one should use (def property :property) 
> > > (property themap). 
> > > 
> > 
> > 
> > No, one shouldn't.
> 
> I disagree... but I will continue to recommend otherwise.  
> 
I disagree... and I will continue to recommend otherwise.   
> 
> > 
> > > Actually this is only somewhat contrived.  It is not uncommon for a user 
> > > to the same nickname in his email nickn...@domain.com 
> > > (mailto:nickn...@domain.com) and in twitter handle, and this is a useful 
> > > similarity feature when this computation is performed for each *pair* of 
> > > field in each *pair* of contacts this computation may need to be 
> > > performed millions of times.
> > 
> > Well, you can use memoization or choose to structure your data in some 
> > other way.
> >  
> > > Perhaps lisp programmers already did? CLOS and OO was born?
> > 
> > 
> > Clojure is not Common Lisp. 
> 
> Agreed, clojure has a much stronger emphasis on immutability than traditional 
> OO programming and is what I like about it... but it is possible to write OO 
> code using immutable data structures but is not as idiomatic.  I don't want 
> clojure to be like CLOS, but I also don't think that we should ignore more 
> than 50 years of lessons learned and "SOLID" programming principles.
> 
> 
> -- 
> 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 
> (mailto: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 
> (mailto: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