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

Reply via email to