2011-05-19 41 views
1

每個參數的優缺點是什麼?分別接受參數與數組

例如:my_func(a,b,c,d,e)vs my_func(params)。

一般來說,我喜歡前者,因爲intellisense可以爲使用IDE的人檢測到它。而使用第二種方法則需要開發人員查找文檔。不過,我注意到Facebook的JS SDK大量使用後者。

+0

我真的不明白要結束的選票。這是一個編程QA站點,這個問題是關於特定的,非常具體的編程實踐的最佳實踐的合理問題。 Pro's和Con's主要是客觀的,通常很容易區分高質量的答案和不好的答案。如果不在這裏,在哪裏? – davin 2011-05-19 14:50:13

回答

1

接受參數數組的一個明顯優勢是您可以自由添加(或刪除!)新參數而不會影響現有實現,因爲方法簽名不會更改。

選擇傳遞參數的另一個可能的原因數組是你可以模擬named parameters,它可以使得方法更加靈活,避免必須擁有一個接受大量參數的方法簽名。

1

這取決於你傳遞了什麼,如果它有一組相關參數,那麼數組是有用的。許多jQuery插件將一組選項作爲關聯數組收集,然後收集其他方法。編寫插件時我通常會這樣做:

var options = { option1: 'stuff', option2: 'etc' }; 
$('#id').myPlugin(options, 'disengage'); 

其中第二個參數是您希望插件執行的操作。

0

確實,這是一個多參數方法。

正如人們在這裏提到的,js對象(這裏的一個數組並不像IMO那麼好)的優點是函數簽名變得靈活。並非JavaScript像其他語言一樣強制執行此操作,但每次您要更改參數時都不必更改函數簽名。

Facebook使用您帶來的示例,每10分鐘更換一次SDK和其他協議(我不喜歡使用Facebook的東西進行開發,他們的文檔令人震驚,他們有一種虐待狂的傾向,沒有向後兼容性的新版本的東西,雖然這不是這個咆哮的地方)。所以對他們來說,這會有所幫助。

一個區別,我在一些場景中找到有用的:

通常,當一個函數執行某種動作,有什麼功能應執行其任務定義參數。例如compare(3,4)將對參數34執行相關算術運算。

另一組參數是定義函數如何表現的參數。例如compare(3,4,'strict')。在這裏,我沒有將'strict'與任何東西進行比較,而是該參數告訴函數我想執行特定類型的比較。

在這個例子中,似乎不大可能會改變,所以主題大多不相關,儘管對於更復雜的函數來說並非如此。我經常發現最「穩定」的參數是的值,函數的定義通常基於這個值。而行爲參數更經常更改,更經常不存在。

除了使方法簽名更「穩定」之外,它使代碼更具可讀性,因爲在每次函數調用時,通常可以看到函數的操作數是什麼,而不是單個對象,這更難了解和調試。