When I first saw var as a Java keyword, my initial reaction was one of skepticism for the reasons already mentioned. However, in practice, I've been using var for years across many code bases (Java and Kotlin) and have never had an issue with readability. I find it to be significantly more pleasant to work with.
Jon On Tue, Oct 29, 2024 at 12:13 PM Štefan Miklošovič <smikloso...@apache.org> wrote: > I get that there might be some situations when its usage does not pose any > imminent problem but the question is how we are going to enforce that _at > scale_? What is allowed and what not ... Sure we can have a code style for > that, but its existence itself does not guarantee that everybody will > adhere to that _all the time_. People are people and make mistakes, stuff > is overlooked etc. > > Upon the review we will argue whether "this particular usage of var is > meaningful or not" and "if the codestyle counts with this or not" and as > many reviews we will have there will be so many outcomes. Dozens of people > contribute to the code and more than that reads it, everybody has some > opinion about that ... Sure, just use var when you prototype etc but I > don't think it is a lot to ask to merge it without vars. Come on ... > > On Tue, Oct 29, 2024 at 8:08 PM Yifan Cai <yc25c...@gmail.com> wrote: > >> I am in favor of *disallowing* the `var` keyword. >> >> It does not provide a good readability, especially in the environments >> w/o type inference, e.g. text editor or github site. >> >> It could introduce performance degradation without being noticed. >> Consider the following code for example, >> >> Set<String> allNames() >> { >> return null; >> } >> >> boolean contains(String name) >> { >> var names = allNames(); >> return names.contains(name); >> } >> >> Then, allNames is refactored to return List later. The contains method >> then runs slower. >> >> List<String> allNames() >> { >> return null; >> } >> >> >> - Yifan >> >> On Tue, Oct 29, 2024 at 11:53 AM Josh McKenzie <jmcken...@apache.org> >> wrote: >> >>> (sorry for the double-post) >>> >>> Jeremy Hanna kicked this link to a style guideline re: inference my way. >>> Interesting read for those that are curious: >>> https://openjdk.org/projects/amber/guides/lvti-style-guide >>> >>> On Tue, Oct 29, 2024, at 2:47 PM, Josh McKenzie wrote: >>> >>> To illustrate my position from above: >>> >>> Good usage: >>> >>> Collection<String> names = new ArrayList<>(); >>> >>> becomes >>> >>> var names = new ArrayList<String>(); >>> >>> >>> Bad usage: >>> >>> Collection<String> names = myObject.getNames(); >>> >>> becomes >>> >>> var names = myObject.getNames(); >>> >>> >>> Effectively, anything that's not clearly redundant in assignment >>> shouldn't use inference IMO. Thinking more deeply on this as well, I think >>> part of what I haven't loved is the effective splitting of type information >>> when constructing generics: >>> >>> Map<InetAddressAndPort, RequestFailureReason> failureReasonsbyEndpoint = >>> new ConcurrentHashMap<>(); >>> >>> vs. >>> >>> var failureReasonsByEndpoint = new ConcurrentHashMap<InetAddressAndPort, >>> RequestFailureReason>(); >>> >>> >>> I strongly agree that we should optimize for readability, and I think >>> using type inference to the extreme of every case where it's allowable >>> would be the opposite of that. That said, I do believe there's cases where >>> judicious use of type inference make a codebase *more* readable rather >>> than less. >>> >>> All that said, accommodating nuance is hard when it comes to style >>> guidelines. A clean simple policy of "don't use type inference outside of >>> testing code" is probably more likely to hold up over time for us than >>> having more nuanced guidelines. >>> >>> On Tue, Oct 29, 2024, at 2:19 PM, Štefan Miklošovič wrote: >>> >>> Yes, for now it is pretty much just in SAI. I wanted to know if this is >>> a thing from now on or where we are at with that ... >>> >>> I am afraid that if we don't make this "right" then we will end up with >>> a codebase with inconsistent usage of that and it will be even worse to >>> navigate in it in the long term. >>> >>> I would either ban its usage or allow it only in strictly enumerated >>> situations. However, that is just hard to check upon reviews with 100% >>> accuracy and I don't think there is some "checker" to check allowed usages >>> for us. That being said and to be on the safe side of things I would just >>> ban it completely. >>> >>> Sometimes I am just reading the code from GitHub and it might be also >>> tricky to review PRs. Not absolutely every PR is reviewed in IDE, some >>> reviews are given without automatically checking it in IDE too and it would >>> just make life harder for reviewers if they had to figure out what the >>> types are etc ... >>> >>> On Tue, Oct 29, 2024 at 7:10 PM Brandon Williams <dri...@gmail.com> >>> wrote: >>> >>> On Tue, Oct 29, 2024 at 12:15 PM Štefan Miklošovič >>> <smikloso...@apache.org> wrote: >>> > I think this is a new concept here which was introduced recently with >>> support of Java 11 / Java 17 after we dropped 8. >>> >>> To put a finer point on that, 4.1 has 3 hits, none of which are valid, >>> while 5.0 has 172. If 'sai' is added to the 5.0 grep, 85% of them are >>> retained. >>> >>> Kind Regards, >>> Brandon >>> >>> >>> >>>