更改功能参数与分配新变量

时间:2013-11-17 22:57:56

标签: java function design-patterns

在下面的代码片段中,我介绍了另一个名为k的变量,以starIndex提供的值开头。然而,正如bcoz我们都知道的那样,它是不必要的,它是一个值的传递。 但我可以看到这两种方法的专业和概念。

  1. 更改函数参数值:如果我修改starIndex的值而不是使用k,则starIndex不再是星号的索引,实质上它已丢失它的意义。如果功能太长,这将会令人困惑。

  2. 介绍k:分配管理新变量的开销/头痛。

  3. To make question generic, what is preferred ? A new variable ? or reusing the function params and modifying their value ?

       private static int getNonStarIndex(String regex, int starIndex) {  
            for (int k = starIndex + 1; k < regex.length(); k++) {
                if (regex.charAt(k) != '*') {
                    return k;
                }
            }
            return regex.length();
        }
    

1 个答案:

答案 0 :(得分:1)

首选解决方案是信任编译器以使底层代码高效,并专注于Java代码可读性。保持你的'k'并将starIndex参数设为final,以便在签名中清楚地表明你在做什么。

编辑: 两种选择(保持k和使starIndex最终)的论据是最不令人惊讶的原则。

想象一下你确实丢了k并重新使用了starIndex参数。这使得下一个正在阅读代码的人不知道你是否知道这个变化纯粹是本地的,或者你确实希望这会改变调用点上starIndex的值。

通过将starIndex参数设为“final”,您可以清楚地了解自己在做什么,并且打算以这种方式执行此操作。