2012-09-21 33 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中可选参数的一种方式,并且必须记住使用它。