You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Daniel Sun (Jira)" <ji...@apache.org> on 2019/11/25 23:53:00 UTC
[jira] [Assigned] (GROOVY-8998) [GEP]Concatenative Method Calls
[ https://issues.apache.org/jira/browse/GROOVY-8998?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Sun reassigned GROOVY-8998:
----------------------------------
Assignee: (was: Daniel Sun)
> [GEP]Concatenative Method Calls
> -------------------------------
>
> Key: GROOVY-8998
> URL: https://issues.apache.org/jira/browse/GROOVY-8998
> Project: Groovy
> Issue Type: New Feature
> Reporter: Daniel Sun
> Priority: Major
>
> h1. *DRAFT*
> {code:java}
> // lots of temp variable declarations and assignments
> def ar = a()
> def br = b(3, ar)
> def r = c(br, 2)
> // inline version of the above code, i.e. nested method calls
> def r =
> c(
> b(
> 3,
> a()
> ),
> 2
> )
> {code}
> {code:java}
> // leverage the power of DGM `with` to transform nested method calls to method call chain
> def r =
> a().with {
> b(3, it)
> }. with {
> c(it, 2)
> }
> {code}
> {code:java}
> // Introduce a new syntax to transform the above method call chain to concatenative method calls
> // `_` represents the result of previous part
> // `|>` is like a big arrow representing the direction of data flow
> // if the target is a variable, `|>` means assignment/declaration
> a() |> b(3, _) |> c(_, 2) |> (def r)
> {code}
> h2. More examples
> {code:java}
> // `|>` has just a bit higher precedence than assignments, e.g. `=`, `+=`, `*=`, etc.
> 6 / a() |> b(3, _) + 9 |> c(_, 2) * 5 |> (def r)
> // the above code is equal to
> def r =
> c(
> b(
> 3,
> 6 / a()
> ) + 9,
> 2
> ) * 5
> {code}
> {code:java}
> // passing multiple parameters
> a(1), 6 / a(2) |> b(_, 3, _) |> (def r)
> // the above code is equal to
> def r =
> b(
> a(1)
> 3,
> 6 / a(2)
> )
> {code}
> h2. discussion in the dev mailing list
> [http://groovy.329449.n5.nabble.com/GEP-Concatenative-Method-Calls-tt5747708.html]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)