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