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 | ...) 
相關問題