Re: Style Police (a rant)
Andreas Leitgeb wrote:
Wanja Gayk wrote:
It's a shame that in Java not all references are implicitly final and
only real variables get marked with "var" instead - that would serve the=
same purpose with less effort and less visual clutter.
It seems like your general coding style differs from mine. The
percentage of re-assigned variables versus those assigned only
once is large enough, that a "var" keyword would cause more
clutter than putting "final" on each other variable.
I'd favor a different change: let final variables optionally
have their type inferred:
final myList = new ArrayList<String>();
Afterall, it is just a handle for some previously obtained value.
That idea is more complex than it appears. Should the inferred type be 'Li=
st<String>', 'AbstractList<String>' or 'ArrayList<String>'? I suspect you =
would say the last, but really, is it so very, very bad to type
final List<String> myList = new ArrayList<>();
? I mean, if you want to talk hard work, an extra second or so of typing r=
eally doesn't qualify, especially since the lack of the supposedly "redunda=
nt" types would harm readability for maintainers. As one whose career has =
involved far more maintenance of existing code than development of new, I m=
uch prefer the explicit typing.
Wanja's main point is that 'final' has a semantic purpose, not an optimizat=
ion one. I agree that the evidence for the advantage of a 'var' keyword ov=
er a 'final' is lacking, but it's moot since 'final' is already part of the=
language and the addition of 'var' is unlikely to occur. Also, styles var=
y widely, as you aptly point out. As long as the purpose is semantic, I re=
commend broad acceptance for different ways to use 'final'.
To repeat, the key point about 'final' is that it prevents reassignment of =
variables, overriding methods or class extension. Such prevention is a mat=
ter of art, but that is the purpose. Not optimization, not really ease of =
reading (which as I stated I find important), but prevention of these vario=
us forms of reassignment. Use 'final' when you mean for something to be fi=
nal, not for false economies.
--
Lew