Yes, that's a problem but "tap" means nothing to me so I need to consult docs to understand code with "tap".
On 8 November 2016 at 15:09, Guillaume Laforge <[email protected]> wrote: > "having" makes me think too much of SQL, so it might be a bit misleading? > > On Tue, Nov 8, 2016 at 4:01 PM, Krzysztof Kowalczyk < > [email protected]> wrote: > >> Hi, >> >> What about "having": >> >> house.having { >> windows.open() >> }.having{ >> doors.locked() >> } >> >> car.having { wheels.having{ screws.allInPlace = true }} >> >> I guess withThis could be an alias (maybe even deprecated) so people >> would be able to find other method when they notice that returning this is >> silly. >> >> Regards, >> Krzysztof >> >> On 8 November 2016 at 14:53, Kostas Saidis <[email protected]> wrote: >> >>> +1 for tap. >>> >>> Alternatives don't seem to fit well. >>> >>> My proposal is touch. >>> >>> Example: >>> >>> assert [:].touch { >>> a = 1 >>> }.touch { >>> b = 2 >>> } == [a:1, b:2] >>> >>> If you start touching the object, it is rather intuitive that you get >>> the object itself as a result :) >>> >>> Cheers, >>> Kostas >>> >>> PS: Some guys here may also like avec, perhaps? >>> >>> >>> >>> On 8/11/2016 4:34 μμ, Paul King 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-stan >>>> dard-library/ >>>> >>>> >>> >> > > > -- > Guillaume Laforge > Apache Groovy committer & PMC Vice-President > Developer Advocate @ Google Cloud Platform > > Blog: http://glaforge.appspot.com/ > Social: @glaforge <http://twitter.com/glaforge> / Google+ > <https://plus.google.com/u/0/114130972232398734985/posts> >
