我有一個功能,將允許用戶返回一組結果。爲了討論的目的,假設它正在返回一系列對象。我想爲調用者提供一個工具來限制返回的對象的數量。零是一個很好的選擇,允許用戶說他們想要所有結果嗎?
在蟒蛇:
def get_records(max=0):
# snipped ..
的max
參數將限制返回記錄的數量。如果它是零,我會返回所有。這是不錯的API設計?
我有一個功能,將允許用戶返回一組結果。爲了討論的目的,假設它正在返回一系列對象。我想爲調用者提供一個工具來限制返回的對象的數量。零是一個很好的選擇,允許用戶說他們想要所有結果嗎?
在蟒蛇:
def get_records(max=0):
# snipped ..
的max
參數將限制返回記錄的數量。如果它是零,我會返回所有。這是不錯的API設計?
只要行爲被記錄下來,您可以使用任何您想要的值,只要它超出人們認爲「正常」參數的範圍。我的意思是,如果你的代碼的客戶想要返回兩件事情,你就不會使用2
作爲特殊值。因此,如果沒有一個有效的用例返回零事件(a),那麼零值就像任何值都表示「所有項目」一樣好。
(一)你可能有一個有效的使用案例,其中有在調用該函數的副作用。一個例子是一個任意列表,您可以在其上調用getFirst(n)
,並首先對列表進行排序,然後返回第一個n
項目。
客戶可能希望打電話給您的代碼getFirst(0)
只是對列表進行排序而沒有得到任何值。
當然,我自己實現了一個完全單獨的函數,所以這是一個稍微有些人爲的例子,但它有希望說明了我試圖解決的問題。
如果語言支持重載,那麼我會使用一個沒有max
參數的重載來指示所有行都被請求。或者,給定可爲空的值和默認值,我可能會使用一個帶空值整數參數的默認值爲null的單個方法。
在C#:
public IEnumerable<Record> GetRecords(int? maximumRecords = null);
我寧願-1到0,如果你把它解釋爲一個無符號整數,你將得到最大可能的整數值它在一個額外的好處。 – aroth
@aroth,假設使用的語言是在封面下使用二進制補碼。只是提出了問題,因爲問題被標記爲與語言無關(即使C沒有保證,因爲符號/量級編碼方案會將-1變爲1,但是,誠然,我不能說我見過這樣的最近野外的野獸)。 – paxdiablo