Well, actually that's not true, Groovy supports creating fields and
properties as well with `var`, so basically everything `def` does
except return types.


Gianluca Sartori
--
Cell. +39 388 1026822


On Thu, 21 Nov 2024 at 17:41, Daniel Sun <sun...@apache.org> wrote:

> Hi Gianluca,
>
>      `var` was introduced to Groovy just for the better compatibility of
> Java. Java just supports declaring variables with `var`, so does Groovy.
>
> Cheers,
> Daniel Sun
>
> On 2024/11/21 10:37:23 Gianluca Sartori wrote:
> > 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