"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>
