2012-09-21 34 views
0

我有一個情況,我在JavaScript中定義了一個具有一些默認參數的函數。有編寫相同的簡單的代碼的多種方式,但我意識到,這似乎是在JavaScript中合法使用的switch隱含落空行爲:隱式遺漏:代碼氣味還是優雅的設計?

//a simplification of the pattern 
function foo(bar, baz, fizz, buzz) { 
    switch (arguments.length) { 
    case 0: 
     bar = 'first'; 
    case 1: 
     baz = 'second'; 
    case 2: 
     fizz = 'third'; 
    case 3: 
     buzz = 'fourth'; 
    } 
} 

我認爲該代碼是在它的簡單優雅,但我擔心自己太聰明瞭。

這是一個優雅的簡化或代碼氣味?

+0

根據道格拉斯克羅克福德這是一種氣味。 –

+0

在任何情況下,您最好添加一條評論,意思是fallthrough是打算的,否則每個人都會認爲它是一個bug,並且您忘記了「break」。 – delnan

+0

@delnan,我同意,這就是爲什麼我採用'// continue;'來代替'break;'。 – zzzzBov

回答

0

代碼的氣味是關於軟件體系結構的,這基本上只是編寫表達式的一種方式。實際的問題是你的意圖是否清楚了另一個程序員閱讀你的代碼,以及它是否可能讓某個人嘗試修改它。花了我幾個通行證來了解它的工作方式,但實際上它與Javascript中很多簡潔表達式相比很清楚,Javascript是一種非常富有表現力的語言,因此可能會使代碼變得非常不透明。我認爲沒有任何意義的人會添加另一個案例,並且發現它的行爲出乎意料,因爲沒有休息時間,並且明確表示其意圖不復存在。它很清楚它只是用於處理函數參數。

我真的很喜歡它作爲處理JS中可選參數的一種方式,並且必須記住使用它。