Switch(some case) {
case 1:
// compute something ...
return something;
break;
case 2:
// compute something ...
return something;
break;
/* some more cases ... */
case X:
// compute something ...
return something;
break;
default:
// do something
return something;
break;
}
在我看来:
假设这个switch语句是合理的,返回和中断看起来不正确或感觉正确。
休息显然是多余的,但是遗漏的风格很差(或者这种风格很差?)?
我个人不这样做,但在代码库中有一些工作正在进行中。不,我不会自以为是并纠正代码库。
答案 0 :(得分:21)
不,遗漏不是穷人的风格 - 包含风格很差。那些是无法达成的陈述。摆脱它们。
我喜欢这样的事实:案例直接返回而不是设置局部变量然后只返回到底部 - 这意味着当你正在阅读所做的代码时它非常清晰需要返回,就是这样。
关于首先切换的侧面说明:
至于在这里使用switch语句是否正确,它实际上取决于其他事情。使用多态类型是否有意义?如果你是Java,你能使用智能枚举吗? (您可以在C#中模仿这些,但没有那么多的支持。)
我认为这至少应该提示考虑不同的设计 - 但它可能是做你想做的最简单的方法。
答案 1 :(得分:11)
如果您这样做说C#编译器中断了无法访问的代码,则会发出警告。因此,在我的书中,返回和休息都是不好的形式。
答案 2 :(得分:5)
在我看来,我会省略'break'关键字。我个人认为这有助于提醒人们'执行已经结束!没什么好看的了!'。
答案 3 :(得分:5)
我会做一个小改动:
switch(some case) {
case 1:
// compute something ...
break;
case 2:
// compute something ...
break;
/* some more cases ... */
case X:
// compute something ...
break;
default:
// do something
break;
}
return something;
答案 4 :(得分:1)
我不确定该代码的字面意义如何,因此其中一些观察可能不适用...
“案例1” 如果你是真正的硬编码这样的人,我认为这是一种糟糕的风格,你应该考虑使用枚举。
如果您只是返回一些内容并且在一部分案例中没有其他逻辑,您可以考虑将“somethings”放在数组或字典中,并简单地通过索引来解决它们而不是使用switch语句。
返回某事[index]
答案 5 :(得分:0)
代码气味意味着设计问题。这只是格式化问题。我想大多数人会同意省略休息的版本是优越的。
答案 6 :(得分:0)
休息是多余的。
一些经验法则,仅在一个地方退出一个函数总是好的,但是由于这个规则被发明了,所以发明了Try-Catch(oop goto)。
如果你在整个应用程序中保持相同的风格,我想你可以接受交换机中的返回。
答案 7 :(得分:0)
这里的代码气味是case语句中的硬编码值。
至于回报,更多的是品味和良好的判断力。当然,如果您的案例跨越多个页面,如果返回的话更容易阅读,但问题是开始时的大转换。
Personnaly我更喜欢单一返回选项,因为如果您需要添加更多处理,那么重构比访问所有情况更便宜。另外,如果给别人重构,他们就不会有在每种情况下复制粘贴代码的诱惑,至少我希望如此......如果他们这样做,他们更希望我不是那些正在进行代码审查的人(对于复制粘贴明显)。
答案 8 :(得分:0)
Switch语句本身就是代码味道。
与l99057j所说的一样,如果您所做的只是将输入映射到常量值,那么这是一个适当的查找结构的位置,例如用于顺序输入的数组/列表或用于a的字典/映射稀疏的,不是switch语句。如果您正在计算某些内容,那么该值将是您使用输入调用的委托。
答案 9 :(得分:0)
其他人对其他方面发表了评论。至于在返回之后多余的中断:我会保持它们,沿着与{}相同的推理围绕单个语句,如果正文:它应该是每个程序员将那些制动器放在那里的第二天性。最好有100个这样的冗余休息,而不是一个无意中遗漏。