2010-05-09 48 views
7

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

我应该写:

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) 

你订购你的函数的参数时遵循任何规则? 你会首先放置哪个参数?

+1

好问题,但是你的措辞方式,这听起来像一个开放式的讨论......你是否真的(或者你更愿意)问是否有一个既定的参数排序约定?如果是这样,哪种语言/环境?就像大写一样,语言之间的这种事情肯定会有所不同。 – 2010-05-09 04:10:17

回答

3

只有3个规则,我通常适用于:

  • 如果语言允许传递一个哈希/地图/关联数组作为一个参数,尽量选择经过这一点。这对于具有> = 3参数的方法特别有用,特别是当这些相同的参数将被传递给嵌套函数调用时。

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

    这在C++等语言中没有类型检查的小缺陷(例如,如果这是一个问题,您的编译器无法检查哈希/映射是否包含正确类型的值)可以将该参数映射封装为结构/类来代替。

  • 如果语言允许参数的缺省值(如C++,Sybase存储过程),你明明离开可选参数是最后一次,和不太可能的参数是用一个值来指定,后面的在列表中它应该去。

  • 否则,在任何逻辑分组中进行排序都是最具可读性/可维护性的。

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

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

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

1

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

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