函数中参数顺序的约定

时间:2010-05-09 04:07:55

标签: parameters function

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

我应该写:

    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)

订购功能参数时是否遵循任何规则? 您首先放置哪个参数,然后放在哪个参数?

2 个答案:

答案 0 :(得分:3)

我通常只适用3条规则:

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

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

    这有一个小缺点,即没有像C ++这样的语言进行类型检查(例如,你的编译器无法检查散列/映射中是否包含正确类型的值以用于预期类型的​​键) - 如果这是一个问题,你可以将该参数映射封装为结构/类。

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

  • 否则,在任何逻辑分组中对它们进行排序是最易读/可维护的。

    这可能有点主观 - 例如可以同等有效地订购下一个/上一个重量/高度next_weight,next_height, prev_weight, prev_heightnext_weight, prev_weight, next_height, prev_height。同样,3个主要考虑因素是您的可读性/逻辑性,以及易于维护。

    就可读性而言,您可以按类型或意义订购。

    就“逻辑性”而言,您可以通过含义对它们进行排序(例如,将所有“下一个”组合在一起,或将所有高度组合在一起),或者通过其他地方强加的某些顺序 - 例如,相应数据库表中的列顺序,或者GUI中的字段顺序(更糟糕的是,因为它可能会发生变化)。

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

答案 1 :(得分:1)

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

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