groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From OC <...@ocs.cz>
Subject Re: .with() variant that returns the original object
Date Tue, 08 Nov 2016 15:17:42 GMT
P.S. Perhaps "resultWith" or "resultTapping" would be even better than "valueXXX".

On 8. 11. 2016, at 16:15, OC <ocs@ocs.cz> wrote:

> Hi there,
> 
> as always I can be wrong, but I do not think it is possible to find a good name which
(a) expresses the behaviour well (b) along with its very close similarity to 'with', which
is a problem of 'tap's etc can be found.
> 
> Therefore myself, I would advocate for
> 
> (a) **renaming current 'with'** (keeping, of course, the original name as an equivalent
for backward compatibility; just by convention discourage its use in new code)
> (b) and adding an appropriate variant of the name for the new functionality.
> 
> Myself, I would probably like
> 
> - 'doWith' for the new one -- considering returning 'this' a reasonable default, which
it is
> - 'valueWith' as a modern equivalent of 'with' for the old functionality
> 
> or perhaps
> 
> - 'tap' for the new one (for all the reasons others expressed in favour of the name)
> - 'valueTapping' as a modern equivalent of 'with' for the old functionality
> 
> or something like that.
> 
> All the best,
> OC
> 
> 
> On 8. 11. 2016, at 15:34, Paul King <paulk@asert.com.au> wrote:
> 
>> Hi everyone,
>> 
>> We are hoping to release 2.5 not too far down the track. We are
>> working on a revamped release process that is going to dramatically
>> improve our ability to release early/release often but also comply
>> with some additional Apache requirements that we follow these days.
>> But more on that another time.
>> 
>> One outstanding feature request targeted for potential inclusion in
>> 2.5 is an alternative to .with{} that automatically returns the
>> original object after executing the closure - recall that .with{}
>> returns the last evaluated expression. The proposal is here:
>> 
>> https://github.com/apache/groovy/pull/174/files
>> 
>> We can't use the old name since that would break backward
>> compatibility and is of utility in its current form in any case, so we
>> are looking for a new name for the proposed method. If you look at the
>> PR you will see it has been called 'tap' and 'doto' and numerous other
>> names have been suggested. We regard naming as very important and
>> normally we'd have very strong views about suitable names based on
>> functionality and similar method names within the Groovy codebase. But
>> in this instance, an obvious name hasn't popped out at us, so we are
>> requesting feedback from the community about what names make most
>> sense to you.
>> 
>> Firstly, here is what the method does. I'll use 'tap' in these
>> examples since that is what the PR currently uses but we can easily
>> change that based on feedback.
>> 
>> myObject.tap {
>>   // some code
>> }
>> 
>> is equivalent to:
>> 
>> myObject.with {
>>   // some code
>>   return this
>> }
>> 
>> Returning the 'self' object lends itself to various kinds of chaining, e.g.
>> 
>> assert [:].tap {
>>   a = 1
>> }.tap {
>>   b = 2
>> } == [a:1, b:2]
>> 
>> Or this one (adapted from a blog post[1] - and assuming you have a
>> config.properties file containing answer=42 as one of the properties):
>> 
>> assert new Properties().tap {
>>   new FileInputStream('config.properties').withCloseable {
>>       load(it)
>>   }
>> }.answer == '42'
>> 
>> Here are some of the names that have been suggested with some commentary:
>> 
>> doto    Used by Clojure. Not camel case as per normal convention
>> (though we have upto and downto which also break that convention) and
>> it isn't immediately obvious which is which between with and doto just
>> from the names
>> 
>> tap    Comes from Ruby and a previous Groovy extension outside core
>> exists; meant to conjure up the idea of tapping into an object
>> 
>> autoWith    Same as with but automatically returns self
>> 
>> doWith   Again, hard to distinguish between doWith and with from the
>> names themselves
>> 
>> tee    An alternative name for tap
>> 
>> auto    A shortened version of 'autoWith'
>> 
>> apply    same as Kotlin which has copied Groovy's with but suffers
>> from the downside that apply is already heavily overleaded in other
>> contexts, e.g. functional programming
>> 
>> withThis    Distinction with normal with a bit subtle perhaps
>> 
>> asThis    Ditto
>> 
>> within    Ditto
>> 
>> I'll also point out the 'identity' is currently an alias for 'with',
>> in case that provides any additional inspiration.
>> 
>> Perhaps you dis/like one of the above or have some other suggestions.
>> Let us know.
>> 
>> 
>> Cheers, Paul.
>> 
>> 
>> [1] http://beust.com/weblog/2015/10/30/exploring-the-kotlin-standard-library/
> 


Mime
View raw message