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