+1 for withThis

withThis{} indicates it is just another form of the .with{} method that returns 
this, that seems the most logical and consistent name.  The name `tap` strikes 
me as non-sensical; what does doing something "with" an object have to do with 
tapping a beer keg or wire tapping a phone line?

My two cents.
Keith

> On Nov 8, 2016, at 10:20 AM, Winnebeck, Jason 
> <[email protected]> wrote:
> 
> Normally, I'd say that we should use Java as first inspiration and all other 
> popular JVM languages (including Kotlin) as second inspiration, because it's 
> really nice as a JVM-ecosystem developer to have a common set of terminology 
> and methods. However, I agree with Paul's analysis. The meaning of "apply" 
> conflicts with Java's Function.apply as well as apply from JavaScript world 
> (I don't know if others agree but I think of Groovy in a similar mindset to 
> JS). The closest Java signature is Function.identity, but identity is already 
> used in Groovy and most think of identity function as "doing nothing".
> 
> Therefore, my vote is for tap. When I see tap it makes sense to me. It makes 
> me think of the Unix "tee" shell command that does the same thing by sending 
> the object to another command and returning the same output unmodified. The 
> usage of tap here is also consistent with network terminology (a network 
> tap), and real-world usage (such as "tapping" a water pipe). A tap observes 
> the input without changing it and allowing it to pass unimpeded, unlike a 
> filter or a function.
> 
> Jason
> 
> -----Original Message-----
> From: Paul King [mailto:[email protected]] 
> Sent: Tuesday, November 08, 2016 9:34 AM
> To: [email protected]
> Subject: .with() variant that returns the original object
> 
> 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/
> 
> This email message and any attachments are for the sole use of the intended 
> recipient(s). Any unauthorized review, use, disclosure or distribution is 
> prohibited. If you are not the intended recipient, please contact the sender 
> by reply email and destroy all copies of the original message and any 
> attachments.

Reply via email to