I vote for withThis for similar reasons as Keith

> On Nov 8, 2016, at 10:57 AM, Suderman Keith <[email protected]> wrote:
> 
> +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