函数中参数顺序的约定

在编写函数时,我的大脑总是花费几毫秒来检查给定函数的哪个参数顺序最适合。

我应该写:

    public Comment AddComment(long userID, string title, string text)

或者可能:

    public Comment AddComment(string title, string text, long userID)

为什么不:

    public Comment AddComment(string title, long userID, string text)

订购功能参数时是否遵守任何规则? 你会首先放置哪个参数?


我通常只适用3条规则:

  • 如果一种语言允许将散列/映射/关联数组作为单个参数传递,请尝试选择传递它。 这对于具有> = 3参数的方法特别有用,特别是当这些相同的参数将被传递给嵌套函数调用时。

    这允许更容易的维护 - 添加另一个参数(尤其是当在10级深度嵌套函数调用之间传递相同的参数列表时)涉及在代码中更改1个位置(最终调用者)而不是使用该列表的每个单一函数并在别处传递它。

    这在C ++等语言中没有类型检查的小缺点(例如,对于期望类型的键,你的编译器无法检查hash / map是否包含正确类型的值) - 如果这是一个问题,可以封装该参数改为映射为结构/类。

  • 如果一种语言允许参数的默认值(例如C ++,Sybase存储过程),那么您显然会将可选参数保留为最后一个参数,并且使用值指定参数的可能性较小,应该在列表中较晚的那个参数走。

  • 否则,在任何逻辑分组最具可读性/可维护性的情况下对它们进行排序。

    这可能有点主观 - 例如下一个/以前的体重/身高可以同样有效地命令next_weight,next_height, prev_weight, prev_heightnext_weight, prev_weight, next_height, prev_height 。 再次,三个主要考虑因素是您的可读性/逻辑性以及易于维护。

    就可读性而言,您可以按照类型或意义对它们进行排序。

    就“逻辑性”而言,您可以按其含义排序它们(例如,将所有“下一个”组合在一起,或者将所有高度组合在一起),或者通过其他位置施加的某个顺序 - 例如对应数据库表中的列顺序或一个GUI(更糟,因为它可能会改变)。

    就维护而言,如果没有明显有意义的订单结晶,字母数字顺序是最好的,因为它允许非常简单的方式通过扫描找到参数,尤其是决定插入新参数的位置。


  • 就我个人而言,我会做第一个,因为这正是我在GUI中的顺序:用户,标题,文本。

    但正如大卫所说,这是非常开放的。 如果我的项目标准需要特殊订单,我会使用它。

    链接地址: http://www.djcxy.com/p/45785.html

    上一篇: Conventions for order of parameters in a function

    下一篇: How should I organize my Java GUI?