4

假设他们都是必需的:什么是函数的常见和合理的参数顺序?

function search (haystack, needle) 
function search (needle, haystack) 

function placeObject (object, column, row) 
function placeObject (column, row, object) 

function newObject (parent, width, height, isVisible) 
function newObject (isVisible, width, height, parent) 
function newObject (width, height, isVisible, parent) 

我认为它往往是个人的选择应该是整个项目一致的问题。但我想知道是否有更深的逻辑来决定每个案件的顺序。

+1

你说,一致性是关键问题 – Randy 2010-12-22 19:30:35

+0

+1。这必须提供见解。 – 2010-12-22 19:31:55

回答

0

我可以想到一些事情,虽然没有一个是“规则”。他们只是我觉得方便的东西。

  1. 一致性。例如,如果您有复制对象的功能,则应与指定源和目标的顺序保持一致。您可以利用人们可能具有的现有偏见(例如,汇编程序MOV指令中的操作数顺序或C标准库函数的顺序参数)。

  2. 分组。将逻辑上“分组”的东西放在一起很有用。例如如果你的函数打开一个到数据库的连接,用户名和密码应该在一起(也可以按照这个顺序)。

  3. 可读性。操作发生的“大”参数应该在较小的参数之前。例如draw_line(canvas, x0, y0, x1, y1)而不是draw_line(x0, y0, x1, y1, canvas)

  4. 也非常有用想到的功能作为它的参数的前缀运算符,然后尝试将其转换成中缀,看看有什么自然。

如果你的语言支持关键字参数,它通常是使用它们(除非它是昭然若揭的参数和顺序应该是什么)一个好主意。

0

我有一种感觉,通常的逻辑是时间的函数。你看,如果你有一个函数:

public Pizza makePizza(cheese, sauce){} 

然后你做数组中的确定摘心数的变量:

int toppingNo = 3; 

你可能想发送给你的函数为好,对?

public Pizza makePizza(cheese, sauce, topping){} 

而且,我的儿子,参数是如何诞生的!

除了讽刺以外,这就是我怎么总是做的,除非你有明确需要进行分组由于它们的相似参数,如坐标系。

+0

我更喜欢小对象分组参数。坐标,配置,... – 2010-12-22 19:45:30

1

尝试发出预期的调用。

function search (needle, haystack) 

在干草堆里搜索针。

function placeObject (object, column, row) 

将对象放置在(列,行)。

newObject是艰难的:尽量保持与框架保持一致,如果有的话,首先把常用的参数。我把isVisible放在最后只是因为它是布尔值,并且很难从布尔文字中推断它的作用。随着多个布尔,我更喜欢将它们组合成整数类型的标志物,有位掩码内置(或键值字典,或字符串,取决于语言)来获得可读性:

openFile(path, READ | LOCKED | COMPRESSED | ...) 
相关问题