And*_*ndy 7 parameters function
在编写函数时,我的大脑总是花费几毫秒来检查哪个参数顺序对于给定函数最佳.
我应该写:
public Comment AddComment(long userID, string title, string text)
Run Code Online (Sandbox Code Playgroud)
或者可能:
public Comment AddComment(string title, string text, long userID)
Run Code Online (Sandbox Code Playgroud)
为什么不:
public Comment AddComment(string title, long userID, string text)
Run Code Online (Sandbox Code Playgroud)
订购功能参数时是否遵循任何规则?您首先放置哪个参数,然后放置哪个参数?
我通常只应用 3 条规则:
如果一种语言允许将哈希/映射/关联数组作为单个参数传递,请尝试选择传递它。这对于具有 >=3 个参数的方法特别有用,尤其是当这些相同的参数将传递给嵌套函数调用时。
这允许更容易的维护 - 添加另一个参数(尤其是在 10 级深度嵌套函数调用之间传递相同的参数列表时)涉及更改代码中的 1 个位置(最终调用者)而不是采用该列表的每个函数并将其传递到其他地方。
这有一个小缺点,即在 C++ 之类的语言中没有类型检查(例如,您的编译器无法检查哈希/映射是否包含预期类型的键的正确类型的值)-如果这是一个问题,您可以封装该参数映射为结构/类。
如果一种语言允许参数的默认值(例如 C++、Sybase 存储过程),您显然将可选参数留在最后,并且越不可能用值指定参数,它应该在列表的后面走。
否则,请按照最可读/可维护的任何逻辑分组对它们进行排序。
这可能有点主观 - 例如下一个/上一个体重/身高可以订购next_weight,next_height, prev_weight, prev_height或next_weight, prev_weight, next_height, prev_height同样有效。同样,三个主要考虑因素是可读性/逻辑性,以及易于维护。
就可读性而言,您可以按类型或含义对它们进行排序。
就“逻辑性”而言,您可以按含义对它们进行排序(例如,将所有“下一个”组合在一起,或将所有高度组合在一起),或按其他地方强加的某种顺序 - 例如,相应数据库表中的列顺序,或中的字段顺序GUI(更糟糕的是,它可能会改变)。
至于维护,如果没有明显的有意义的顺序结晶,字母数字顺序是最好的,因为它允许通过扫描找到参数的非常简单的方法,特别是决定在何处插入新参数。