Language agnostic 零参数是允许用户说他们想要所有结果的好选项吗?

Language agnostic 零参数是允许用户说他们想要所有结果的好选项吗?,language-agnostic,Language Agnostic,我有一个函数,允许用户返回一组结果。在本讨论中,假设它返回一系列对象。我想为调用者提供一个工具来限制返回的对象的数量 在python中: def get_records(max=0): # snipped .. max参数将限制返回的记录数。如果它是零,我将返回所有。这是一个很好的API设计吗? < P>只要行为被记录,你可以使用任何你想要的值,只要它超出了人们认为的“正常”参数的范围。我的意思是,如果您代码的客户希望返回两件东西,那么您不会使用2作为特殊值 因此,如果没有返回零的有效

我有一个函数,允许用户返回一组结果。在本讨论中,假设它返回一系列对象。我想为调用者提供一个工具来限制返回的对象的数量

在python中:

def get_records(max=0):
    # snipped ..

max
参数将限制返回的记录数。如果它是零,我将返回所有。这是一个很好的API设计吗?

< P>只要行为被记录,你可以使用任何你想要的值,只要它超出了人们认为的“正常”参数的范围。我的意思是,如果您代码的客户希望返回两件东西,那么您不会使用
2
作为特殊值

因此,如果没有返回零的有效用例(a),那么零和任何表示“所有项”的值一样好


(a) 您可能有一个有效的用例,其中调用函数会产生副作用。一个例子是一个任意列表,在该列表上调用
getFirst(n)
,首先对列表进行排序,然后返回第一个
n

客户可能希望使用
getFirst(0)
调用您的代码,只对列表进行排序,而不获取任何值


当然,我自己会实现一个完全独立的函数,所以这是一个稍微做作的示例,但希望它能说明我试图表达的观点。

如果语言支持重载,那么我会使用一个没有
max
参数的重载来指示请求了所有行。或者,给定可为null的值和默认值,我可以使用一个带有可为null的整数参数(默认值为null)的方法

在C#中:

public IEnumerable GetRecords(int?maximumRecords=null);

我更喜欢-1而不是0。它还有一个额外的好处,即如果您将其解释为无符号整数,您将获得可能的最大整数值。@aroth,这是假设所使用的语言在封面下使用了2的补码。只是提出一个问题,因为这个问题被标记为语言不可知论(即使是C也不能保证这一点,因为符号/幅度编码方案会将-1变为1,不过,无可否认,我不能说我最近在野外见过这样的野兽)。
public IEnumerable<Record> GetRecords(int? maximumRecords = null);