什么是更好的实践:重复代码或使用goto语句?
我正在研究C#,遇到以下情况,有什么更好的实践,像“EX 1”一样复制代码或使用像“EX 2”这样的goto
语句? 我不想要个人运动。
// EX 1:
switch (a)
{
case 3:
b = 7;
c = 3; // duplicate code <-|
break; // |
case 4: // |
c = 3; // duplicate code --|
break;
default:
b = 2;
c = 4;
break;
}
// EX 2:
switch (a)
{
case 3:
b = 7;
goto case 4; // not duplicate code and use goto statement
case 4:
c = 3;
break;
default:
b = 2;
c = 4;
break;
}
例1优点和缺点
+ Common structure + Simple to understand logic - More lines of code - Code repetition
例2优点和缺点
+ Fewer lines of code + No code repetition - It complicates logic - It is not commonly used in production code
底线
我更喜欢示例1,因为在这种特殊情况下,节省的成本很低,但逻辑变得更加复杂。 可以说,如果更多人开始使用相同的代码, Goto
可能会增加bug的可能性,因为代码难度增加。 让我们来看看这个令人尴尬的错误。 如果开发者没有使用goto
,那就不会有这样的问题!
奖励积分
enums
来选择案例,所以case 3:
=> case CarPart.SteeringWheel
case
都有一个break;
default
情况 考虑使用多态和继承而不是switch case
ICarPart part1 = new SteeringWheel();
ICarPart part2= new Mirror();
var parts = new List<ICarPart>() {part1, part2};
// now call your original method on the parts
// no more need for a switch case
这真的取决于。
案例3是案例4的特例吗?
在那种情况下,goto可能是有序的,因为如果我们在稍后的时间点为case 4添加一些新的行为,那么我们也会自动为case 3获取它。
如果案例3和4不相关,则重复代码更好。
如果你的真实情况是这么小,只有几行,我宁愿复制代码,因为简单和可读性。
我个人不喜欢goto
因为它会让你的代码不易理解和重现。
我没有看到第一个代码示例的主要问题。 如果你需要,你也可以拆分b
和c
处理,如果这是有道理的。
你应该考虑什么更重要:
goto
。 上一篇: What is the better pratice: duplicate code or use goto statement?
下一篇: Is empty case of switch in C# combined with the next non