You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Björn Kautler (Jira)" <ji...@apache.org> on 2025/11/12 14:59:00 UTC

[jira] [Updated] (GROOVY-11802) Method return type documentation is wrong

     [ https://issues.apache.org/jira/browse/GROOVY-11802?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Björn Kautler updated GROOVY-11802:
-----------------------------------
    Description: 
The documentation about method return types is quite wrong.
It for example says "Methods in Groovy always return some value" which is not true if it is declared as {{{}void{}}}.
It also says "return type or with the {{def}} keyword" which is not correct as you can also have both and also can have neither.
And it says "{{{}def{}}} keyword, to make the return type untyped" which is also not correct if you specify {{def}} and a return type.

The truth as far as I know and tried is, if you do not specify a return type explicitly (like {{void}} or an actual type), you have a dynamic return type / untyped return type / flexible return type / however you want to name it, `MethodNode` names it {{{}org.codehaus.groovy.ast.MethodNode#isDynamicReturnType{}}}.
And {{def}} is just there to disambiguate some cases that would otherwise be unclear to the parser probably, and can even be combined with {{{}void{}}}.
You need it e. g. if you have {code}foo() { }{code} or {code}<T> T foo() { null }{code}, but not if you e. g. have {code}static foo() { }{code} or {code}private foo() { }{code}.
 

  was:
The documentation about method return types is quite wrong.
It for example says "Methods in Groovy always return some value" which is not true if it is declared as {{{}void{}}}.
It also says "return type or with the {{def}} keyword" which is not correct as you can also have both and also can have neither.
And it says "{{{}def{}}} keyword, to make the return type untyped" which is also not correct if you specify {{def}} and a return type.

The truth as far as I know and tried is, if you do not specify a return type explicitly (like {{void}} or an actual type), you have a dynamic return type / untyped return type / flexible return type / however you want to name it, `MethodNode` names it {{{}org.codehaus.groovy.ast.MethodNode#isDynamicReturnType{}}}.
And {{def}} is just there to disambiguate some cases that would otherwise be unclear to the parser probably, and can even be combined with {{{}void{}}}.
You need it e. g. if you have {{foo() \{ }}} or {{{}<T> T foo() \{ null }{}}}, but not if you e. g. have {{static foo() \{ }}} or {{{}private foo() \{ }{}}}.
 


> Method return type documentation is wrong
> -----------------------------------------
>
>                 Key: GROOVY-11802
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11802
>             Project: Groovy
>          Issue Type: Documentation
>            Reporter: Björn Kautler
>            Priority: Major
>
> The documentation about method return types is quite wrong.
> It for example says "Methods in Groovy always return some value" which is not true if it is declared as {{{}void{}}}.
> It also says "return type or with the {{def}} keyword" which is not correct as you can also have both and also can have neither.
> And it says "{{{}def{}}} keyword, to make the return type untyped" which is also not correct if you specify {{def}} and a return type.
> The truth as far as I know and tried is, if you do not specify a return type explicitly (like {{void}} or an actual type), you have a dynamic return type / untyped return type / flexible return type / however you want to name it, `MethodNode` names it {{{}org.codehaus.groovy.ast.MethodNode#isDynamicReturnType{}}}.
> And {{def}} is just there to disambiguate some cases that would otherwise be unclear to the parser probably, and can even be combined with {{{}void{}}}.
> You need it e. g. if you have {code}foo() { }{code} or {code}<T> T foo() { null }{code}, but not if you e. g. have {code}static foo() { }{code} or {code}private foo() { }{code}.
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)