Hello everybody,

My name is Gianluca Sartori, from Italy, I am the author of the open source
project Dueuno Elements (https://github.com/dueuno-projects/dueuno-elements)
and I am new to this list.

I would like to start using the more Java-ish `var` instead of the
Python-ish `def` lexicon but I came across the fact that I cannot use `var`
as method return type placeholder.

My understanding is that I can use `var` for both local variables and class
fields/properties but I cannot use it, for example, if I want to have a
read only property. The code below does not compile:

class C {
    var firstname
    var lastname

    var getFullname() {
        return firstname + ' ' + lastname
    }
}

var c = new C(firstname: 'Gianluca', lastname: 'Sartori')
c.fullname

I'd like to switch to using `var` as a type placeholder, but having to use
`var` for variable declaration and keep using `def` for methods definition
is something I don't understand. I love Groovy because it is easy. This
restriction of the `var` type placeholder forces me to write code that
mixes Python lexicon the new Java lexicon.

My main worry is with Grails controllers where we need to define an action
using `def` (or `Object`) as return type and define variables in the method
body. At the moment we have the following options:

*def* index() {
    *def* myVar = ...
}

*def* index() {
    *var* myVar = ...
}

*def* index() {
    *Object* myVar = ...
}

*Object* index() {
    *def* myVar = ...
}

*Object* index() {
    *var* myVar = ...
}

*Object* index() {
    *Object* myVar = ...
}

I would like to write controllers like this:

*var* index() {
    *var* myVar = ...
}

to keep the code clean and coherent with the Groovy documentation that
states clearly that *"If you think of def and var as an alias of Object,
you will understand in an instant."*

Is this enough of an argument to ask for an implementation of `var` that is
fully intrechangable with `def`?

Please let me know what is your opinion on that,
cheers,
Gianluca

Gianluca Sartori
--
Cell. +39 388 1026822

Reply via email to