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