groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Krzysztof Kowalczyk <kowalczyk.krzysz...@gmail.com>
Subject Re: .with() variant that returns the original object
Date Tue, 08 Nov 2016 15:14:46 GMT
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 <glaforge@gmail.com> 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 <
> kowalczyk.krzysztof@gmail.com> 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 <saikos@gmail.com> 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>
>

Mime
View raw message