Reference other return value with the following syntax:

```
returnA:
return callA() if _ > 5

return callB() if _ > 10 && returnA._ > 1
```

Cheers,
Daniel Sun
On 2020/07/25 19:57:16, Daniel Sun <sun...@apache.org> wrote: 
> Or a more verbose version:
> 
> ```
> return callB() if (r -> r > 10)
> ```
> 
> Cheers,
> Daniel Sun
> On 2020/07/25 19:51:47, Daniel Sun <sun...@apache.org> wrote: 
> > If we take intellisense of IDE into account, the proposal could be refined 
> > as follows:
> > 
> > ```
> > return callB() [r -> r > 10]
> > ```
> > 
> > Cheers,
> > Daniel Sun
> > On 2020/07/25 19:39:20, Daniel Sun <sun...@apache.org> wrote: 
> > > Hi OC,
> > > 
> > > Let me make the example a bit more complicated to clarify my proposal:
> > > 
> > > ```
> > > def m() {
> > >    def a = callA()
> > >    if (null != a) return a
> > > 
> > >    def b = callB()
> > >    if (b > 10) return b
> > > 
> > >    def c = callC()
> > >    if (null != c && c < 10) return c
> > > 
> > >    LOGGER.debug('the default value will be returned')
> > >    
> > >    return defaultValue
> > > }
> > > ```
> > > The above code could be simplified as follows:
> > > ```
> > > def m() {
> > >    return? callA()                   // same to `return(r -> null != r) 
> > > callA()`
> > >    return(r -> r > 10) callB()
> > >    return(r -> null != r && r < 10) callC()
> > > 
> > >    LOGGER.debug('the default value will be returned')
> > > 
> > >    return defaultValue
> > > }
> > > ```
> > > 
> > > Cheers,
> > > Daniel Sun
> > > On 2020/07/25 19:21:01, OCsite <o...@ocs.cz> wrote: 
> > > > Daniel,
> > > > 
> > > > -1. In my personal experience this happens very rarely, not worth a 
> > > > special support in the language by far. Almost all similar cases for me 
> > > > are covered by simple
> > > > 
> > > > def foo() {
> > > >   ... ...
> > > >   bar()?:defaultValue
> > > > }
> > > > 
> > > > and the cases where this is not adequate, either due a non-null false 
> > > > return value which should be returned instead of the default, or due to 
> > > > a non-trivial code needed at //! below, in my code almost never happen.
> > > > 
> > > > Contrariwise, if you are about to improve the language for simplicity 
> > > > and easiness of returns, you definitely should consider allowing 
> > > > returning void from a void method — this should be a completely valid 
> > > > code (as is e.g., in C):
> > > > 
> > > > void foo() { ... }
> > > > void bar() {
> > > >   return foo()
> > > > }
> > > > 
> > > > As always, of course, YMMV.
> > > > 
> > > > All the best,
> > > > OC
> > > > 
> > > > > On 25 Jul 2020, at 20:55, Daniel Sun <sun...@apache.org> wrote:
> > > > > 
> > > > > Hi all,
> > > > > 
> > > > >     We always have to check the returning value, if it match some 
> > > > > condition, return it. How about simplifying it? Let's see an example:
> > > > > 
> > > > > ```
> > > > > def m() {
> > > > >    def r = callSomeMethod()
> > > > >    if (null != r) return r
> > > > > //!
> > > > >    return theDefaultResult
> > > > > }
> > > > > ```
> > > > > 
> > > > > How about simplifying the above code as follows:
> > > > > ```
> > > > > def m() {
> > > > >    return? callSomeMethod()
> > > > //!
> > > > >    return theDefaultResult
> > > > > }
> > > > > ```
> > > > > 
> > > > > Futhermore, we could make the conditional return more general:
> > > > > ```
> > > > > def m() {
> > > > >    return(r -> r != null) callSomeMethod() // we could do more 
> > > > > checking, e.g. r > 10
> > > > >    return theDefaultResult
> > > > > }
> > > > > ```
> > > > > 
> > > > >    Any thoughts?
> > > > > 
> > > > > Cheers,
> > > > > Daniel Sun
> > > > 
> > > > 
> > > 
> > 
> 

Reply via email to