>  'var' support [..] slightly more flexible
> than Java but definitely not use var (short for variable) for methods.
>

You say it is "short for variable" (like in "define a variable?") but the
documentation says it is "short for Object". It says it is a "Type
Placeholder".

This is confusing because neither Java nor Groovy have a specific keyword
to define variables.

In both languages variables are defined by preposing a Type before the
*variable* name.
In both languages methods are defined by preposing a Type before the
*method* name.

So if `var` is to be a Type Placeholder it should be valid in all contexts
where a Type is valid, so everywhere `def` is valid.

Now, I understand it may not be immediate to use `var` in front of a method
definition but if it is documented as a Type Placeholder then that's the
way our mind will look at it.

I never saw `def` as something else than a keyword in Python, because in
the docs they say it is a keyword.
I never saw `def` as a keyboard in Groovy because in the docs they say it
is a type placeholder equivalent to Object.

*I think it is a mistake for Groovy to document `var` the way it is
documented today. Because it is suggesting people to use it, but it is not
a core Groovy feature, it is not idiomatic Groovy, it is a marginal
addition that exists just to make a compiler happy when copy-pasting Java
code. It should not be mentioned in the docs along with `def`. It should be
documented in a separate chapter "Java source code compatibility"or
something like that.*

Cheers,
Gianluca



> Cheers, Paul.
>
> On Wed, Nov 27, 2024 at 4:46 AM Gianluca Sartori <g.sart...@gmail.com>
> wrote:
> >
> >
> >
> >> For me, def == var, in my mental model. Which means == Object.
> >
> >
> > This is how I was looking at it since that’s how it has been documented,
> but it has not been implemented that way.
> >
> > At this point of the discussion I understood it is a documentation
> issue, but still something in my mind is telling me we should have def ==
> var.
> >
> > It would be groovier!
> >
> > Cheers,
> > Gianluca
> >
> >
> >
> >> On Tue, Nov 26, 2024 at 5:08 PM MG <mg...@arscreat.com> wrote:
> >>>
> >>> Hi Rémi,
> >>>
> >>> yes, I saw that, thank you.
> >>>
> >>> Most of the examples seemed obvious to me, and the bugs that could be
> introduced feel like they are a little bit on the artficial side.
> >>>
> >>> But, having said that: Inferring an interface type or a less specific
> parent type in some cases could imho be a very Groovy thing:
> >>>
> >>> e.g. inferring List<T> instead of ArrayList<T>
> >>> Potentially through some explicit construct, such as "var>" to
> indicate that a more loose / interface type shall be used.
> >>>
> >>> Not that I see any of that becoming a reality anywhere in the near
> future... ;-)
> >>>
> >>> Cheers, mg
> >>>
> >>> PS: I googled a bit, and I could not find in general that ppl think var
> >>> in Java is something you should avoid. Instead, as with any language
> >>> feature, one can over-/abuse it, thereby making code less readable than
> >>> when using explicit types.
> >>> It is funny thinking about this in the context of Groovy, where
> >>> typically ppl who use it as a scripting language do not even use final
> >>> instead of def when defining variables, even though they will never
> >>> reassign said variable 99% of the time... ;-)
> >>>
> >>> There is an official guide that explains some of the gotchas
> >>>   https://openjdk.org/projects/amber/guides/lvti-style-guide
> >>>
> >>> regards,
> >>> Rémi
> >>>
> >>
> >>
> >> --
> >> Guillaume Laforge
> >> Apache Groovy committer
> >> Developer Advocate @ Google Cloud
> >>
> >> Blog: glaforge.dev
> >> Twitter: @glaforge
> >> Mastodon: @glafo...@uwyn.net
>

Reply via email to