-1 Coming from a C/C++ background that has `const` I typically do not use final because it does not give me a truly final (const) object and users can still do:
final object = new SomeMutableObject() object.mutateMe(); That just rubs me the wrong way. So as Pau says below, I typically skip the final keyword, but code as if object(s) are final/const as needed. Keith > On Jul 22, 2018, at 1:53 AM, Paul King <pa...@asert.com.au> wrote: > > I am probably -1 right now on a new keyword when I think the existing one > works just fine. > > One reason some Groovy folks might not use final more frequently is because > it has > historically (up until 2.4.x) been ignored by Groovy for local variables. Java > also ignores final at runtime for local variables but that doesn't matter for > a statically > compiled language. Have a look at the bytecode using javap -v from this Java > program: > > public class Hello { > public void method1() { > final Object o1 = new Object(); > } > public void method2() { > Object o2 = new Object(); > } > } > > You will notice that the bytecode for method1 and method2 is identical. > Groovy 2.5 does a better job of detecting final for local variables. It does > it > in a similar sort of way to Java - at compile time. I'd be inclined to wait > and > see how this added support (plus @AutoFinal <>) affects usage. > > The other discussions I have seen around not using final are around style. > The 'final' modifier is particularly good at stopping the practice of > mutating some > variable mid-way through a long method in a confusing way. Agile practices > discourage long methods, functional style discourages mutating variables > and codenarc can be used to some extent to catch bad behavior. So some > advocate omitting the final keyword but coding as if it was there to obtain > more succinct, easier to read code. Now that we have @AutoFinal, I am > not sure that we need to aggressively further promote its usage but rather > watch how usage changes in the short term. > > Cheers, Paul. > > > On Sun, Jul 22, 2018 at 7:50 AM MG <mg...@arscreat.com > <mailto:mg...@arscreat.com>> wrote: > Hi guys, > > I have been wondering for a while whether Groovy developers use "def" > even if a variable is actually is "final" not only because every Groovy > example code uses "def", but also because "final" as a word is longer > than "def". > Therefore I propose to introduce the shortcut "fin" for "final" in Groovy. > > e.g. to support > > class Goo { > fin String name > fin Goo gooParent > Goo(fin String name, fin Goo gooParent) { ... } > String gooGoal(fin x) { > fin y = 2*x > fin int z = x + y > } > } > > Cheers, > mg > > >