I agree with Johan here, I’d even go ahead and write something like:
```
def chooseMethod(String methodName, Object[] arguments) {
final methodChosen = doChooseMethod(methodName, arguments)
?: doChooseMethod(methodName, adjustArguments(arguments.clone(),
Character.TYPE))
?: doChooseMethod(methodName, adjustArguments(arguments.clone(),
Integer.TYPE))
if (null != methodChosen) return methodChosen
throw new GroovyRuntimeException("$methodName not found")
}
```
If the language would consider ‘throw' an expression, then:
```
def chooseMethod(String methodName, Object[] arguments) {
return doChooseMethod(methodName, arguments)
?: doChooseMethod(methodName, adjustArguments(arguments.clone(),
Character.TYPE))
?: doChooseMethod(methodName, adjustArguments(arguments.clone(),
Integer.TYPE))
?: throw new GroovyRuntimeException("$methodName not found")
}
```
-1 from me overall.
—
Daniil Ovchinnikov
JetBrains
> On 27 Jul 2020, at 07:00, Jochen Theodorou <[email protected]> wrote:
>
> On 26.07.20 20:23, Daniel Sun wrote:
>> Hi mg,
>>
>>> maybe you can give some real life code where you encounter this on a
>>> regular basis ?
>>
>> Let's think about the case about choosing method by method name and
>> arguments:
>>
>> ```
>> def chooseMethod(String methodName, Object[] arguments) {
>> def methodChosen = doChooseMethod(methodName, arguments)
>> if (null != methodChosen) return methodChosen
>>
>> methodChosen = doChooseMethod(methodName,
>> adjustArguments(arguments.clone(), Character.TYPE))
>> if (null != methodChosen) return methodChosen
>>
>> methodChosen = doChooseMethod(methodName,
>> adjustArguments(arguments.clone(), Integer.TYPE))
>> if (null != methodChosen) return methodChosen
>>
>> throw new GroovyRuntimeException("$methodName not found")
>> }
>> ```
>
> now that I would now maybe write like this:
>
>>> def chooseMethod(String methodName, Object[] arguments) {
>>> def methodChosen = doChooseMethod(methodName, arguments)
>>> methodChosen ?: doChooseMethod(methodName,
>>> adjustArguments(arguments.clone(), Character.TYPE))
>>> methodChosen ?: doChooseMethod(methodName,
>>> adjustArguments(arguments.clone(), Integer.TYPE))
>>> if (null != methodChosen) return methodChosen
>>>
>>> throw new GroovyRuntimeException("$methodName not found")
>>> }
>
>
> compared to
>
>>
>> The above code could be simplified as:
>> ```
>> def chooseMethod(String methodName, Object[] arguments) {
>> return? doChooseMethod(methodName, arguments)
>> return? doChooseMethod(methodName, adjustArguments(arguments.clone(),
>> Character.TYPE))
>> return? doChooseMethod(methodName, adjustArguments(arguments.clone(),
>> Integer.TYPE))
>>
>> throw new GroovyRuntimeException("$methodName not found")
>> }
>> ```
>
> bye Jochen