Kirk speaks my mind.  -1 on this requirement

On 4/21/21, 11:29 AM, "Kirk Lund" <kl...@apache.org> wrote:

    -1 as I've already explained in my DISCUSS thread for this topic, I don't
    think final gives sufficient benefit for local variables or method
    parameters because it only prevents reassigning object pointers and
    primitive values.

    I favor individuals making a personal decision on whether or not they want
    to use 'final' in this way without requiring others to do the same (and NOT
    requiring this use of 'final' in PR reviews, although "suggesting" is ok).

    Note that JDK and all other libraries I looked through do not use final in
    this way.

    *I'm willing to change my vote to -0 if*:

       1. we qualify the requirement to only apply to method and constructor
       parameters (not local vars)
       2. we find a way to introduce automation for enforcement (such as we do
       with RAT for license headers)

    *I'm willing to change my vote to +1 if *we decide to require 'final'
    parameters (and even local vars) as part of a bigger shift towards
    improving code quality by embracing Clean Code (ala Bob Martin):

       1. we commit to developing a robust and thorough coding standard that
       includes requiring true unit tests and passing in dependencies via class
       constructors or methods
       2. we revisit our DOD and enforce it in PR reviews

    I recommend that contributors use IntelliJ inspections (or comparable
    guideline for anyone who doesn't want to use IntelliJ) that will assist us
    in avoiding and fixing long methods when writing new methods and when
    editing/refactoring existing methods (see below)
    Method metrics (see IntelliJ > Preferences > Editor > Inspections):

       - Method with too many parameters
       - Overly complex method
       - Overly long method
       - Overly nested method

    The inspections can be customized for Geode as long as the values aren't
    increased to the point of it being useless. For example, we would have to
    agree as a community what the "maximum number of parameters" is for the
    "Method with too many parameters" inspection.

    We could even export an inspections profile to be stored in the Geode repo
    and used by contributors.

    -Kirk

    On Wed, Apr 14, 2021 at 12:55 PM Kirk Lund <kl...@apache.org> wrote:

    > Our coding standard and our Design Decisions does NOT require using final
    > on parameters and local variables.
    >
    > Please do NOT request that I add or keep final on parameters or local
    > variables unless the community votes and decides that every parameter and
    > local variable should require the final keyword. I coded this way in the
    > past and I found that it resulted in noisy code with no benefit. We can
    > argue about using this keyword all you want but the fact is I'm against 
it,
    > and I will not embrace it unless this community decides that we need to 
use
    > it.
    >
    > Using final on instance or class fields does have a concurrency benefit
    > and I support that only.
    >
    > If you want to add final to every single parameter and local var in the
    > Geode codebase, then now is your chance to vote on it. Please vote.
    >
    > Thanks,
    > Kirk
    >
    >

Reply via email to