代码之家  ›  专栏  ›  技术社区  ›  Louis Jacomet

对于可能修改(回写)参数的函数和方法,具有良好的命名约定。

  •  1
  • Louis Jacomet  · 技术社区  · 7 年前

    我需要为处理“值数组”的例程找到一个好的、可理解的命名方案。 (我写了类似C++的东西。) valarray 在爪哇中,考虑到对原始类型的一些优化 .

    我知道程序的主要分类如下:

    • 函数(它们可能接受参数,必须返回某些内容)
    • 方法(它们可以接受参数,不返回任何内容)

    出于性能方面的考虑,我不仅允许定义威胁其参数为只读的函数/方法,还允许定义可能修改其第一个参数的函数/方法。

    这样人们不仅能做到…:

    ValArrayInt a=..., b=...;
    // "apply" treats "a" and "b" as readonly
    ValArrayInt temp = ValArrays.apply(adder, a, b); // temp = a + b
    a = temp;
    

    …但这也是:

    ValArrayInt a=..., b=...;
    // "apply" modifies "a"
    a.apply(adder, b); // a += b
    

    请为这些类型的例程建议一个命名方案:

    • 功能 将所有参数视为 只读
    • 功能 哪一个 可以修改 它们的第一个参数
    • 方法 将所有参数视为 只读
    • 方法 哪一个 可以修改 它们的第一个参数

    我曾经想过修改方法、不修改方法或类似的东西,但是我认为这些名称不够简单,而且太长。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Kannan Ekanath    16 年前

    我总是在方法名中使用“更新”一词来表示结果将更新一个或多个参数。对于EX:

    updateClaimWithPolicyDetails(Claim c, PolicyCriteria pc, String identifier)
    

    你可以合理地推断出这个方法 可以 更新索赔对象。如果用户想了解更多信息,就可以深入了解javadoc

    对于返回某些内容并更新参数的函数,可以使用“updateandget”。

    public Policy updateClaimAndGetPolicy(Claim c, PolicyCriteria pc, String identifier) 
    

    由此,您可以推断您正在更新索赔并返回保险单(索赔可能已经针对保险单进行了更新)。

    如果一个方法中没有使用updateXXX这个词,那么您应该假设所有参数都是只读的。如果你有两个可更新的参数,那么你可以说

    updateClaimAndPolicyCriteria(Claim C, PolicyCriteria pc, String junkParam)
    

    上面可以告诉您索赔和保险单标准都将更新。

        2
  •  0
  •   cherouvim    16 年前

    将此信息编码到方法名中可能很复杂。

    另一方面,这个信息 必须 通过明确说明方法的副作用,在方法的文档中存在(例如在JavaDoc上)。

        3
  •  0
  •   GreenieMeanie    16 年前

    我喜欢上面关于预挂起更新或修改的回答。然而,这实际上应该是文档的一个函数,用来描述调用函数的作用以及它如何影响参数。但是,通常您不希望修改传递给函数的参数,因为在某些情况下(如collections.sort),您希望这样做以防止复制。另外,确保在适当的时候使用不可变的对象,而不是总是使用一些公共的吸气剂和设置器使用一些愚蠢的JavaBean类。

    推荐文章