【问题标题】:Method naming: including or excluding the parameter type with multiple similar methods方法命名:包含或排除多个类似方法的参数类型
【发布时间】:2011-06-19 03:10:34
【问题描述】:

当面对一个类有多个相似的方法在不同的参数类型上运行时,你是在方法名中包含对参数的某种描述,还是保持名称相同并相信参数本身提供了足够的信息?对比下面给出的两个例子:

interface Option1 {
    update(ObjectA);
    update(ObjectB);
    update(List<Object>);
}

interface Option2 {
    updateA(ObjectA);
    updateB(ObjectB);
    updateAll(List<Object>);
}

我听说过以下论点:

  • 选项 1 更好,因为它不包含冗余信息
  • 选项 2 更好,因为代码更易读且更易于维护

【问题讨论】:

    标签: methods naming-conventions method-names


    【解决方案1】:

    这取决于。方法重载之所以存在是因为它很有用。但是,它也会让你感到悲伤。

    如果您正在考虑重载,请考虑:

    • 这些方法是否解决了不同的问题?
    • 可读性是否会受到影响——读者能否分辨出调用了哪个方法?
    • 您的接口是否可能与其他具有相似方法名称的接口混在一起?
    • 参数是否可以实现不止一种参数类型?如果是这样,可能会导致歧义,编译器可能会要求您解决它。

    例如:

    • Java 的String.indexOf() 过载。所有的重载都有相同的意图。不会有额外的 indexOf() 方法混合到叶类中。
    • setX() 方法通常全部命名为set()——以上所有问题都可以回答“是”。

    【讨论】:

    • 谢谢,我认为您的所有观点都非常简单,除了第二点。您将如何决定是否会损害可读性?如果我可以回到更新示例,它可能会也可能不会 - 它似乎很大程度上取决于调用类。
    • 它还很大程度上取决于可以实现接口的具体类集,以及可以实现参数的具体类集。给定方法 o.update(A) 和 o.update(B),由 o.update(x) 调用?根据 o 和 x 的类别,它可能是第一个、第二个、两者都不是或模棱两可。额外的论点使它更有趣。
    【解决方案2】:

    对于支持方法重载的静态类型语言,选项 1。

    用于处理对象层次结构,选项 1。

    对于所有其他情况,我建议选项 2。

    我的 2 美分。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多