I recently faced some var usage in the CQL layer part where it was making
the code pretty hard to understand. I am in favor of prohibiting it.

Le mar. 29 oct. 2024 à 20:32, Caleb Rackliffe <calebrackli...@gmail.com> a
écrit :

> Josh's example of "good" usage seems defensible, because the declared type
> is already obfuscated to Collection anyway, and my eyeballs are going to
> skip to the right anyway to see the instantiated type. I'm +0 on
> prohibiting it in non-test code, and -1 on prohibiting it in tests.
>
> On Tue, Oct 29, 2024 at 2:23 PM Jon Haddad <j...@rustyrazorblade.com>
> wrote:
>
>> 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
>>>>>
>>>>>
>>>>>
>>>>>

Reply via email to