使用“ goto”语句不好吗?

在研究了如何突破次级循环之后

while (true) { // Main Loop
   for (int I = 0; I < 15; I++) { // Secondary loop
       // Do Something
       break; // Break main loop?
   }}

大多数人建议调用“ goto”功能, 
如以下示例所示:

while (true) { // Main Loop
   for (int I = 0; I < 15; I++) { // Secondary Loop
       // Do Something
       goto ContinueOn; // Breaks the main loop
   }}ContinueOn:

然而; 我经常听到'goto'声明是不好的做法。下图完美地说明了我的观点:

http://img3.mukewang.com/5d8c223e0001a39b07400201.jpg

所以

  • goto语句实际上有多糟糕,为什么?

  • 有没有比使用“ goto”语句更有效的方法来打破主循环?


九州编程
浏览 739回答 3
3回答

Helenr

编辑:goto语句实际上有多糟糕,为什么?这取决于实际情况。我不记得任何时候我发现它使代码比重构更易读。这也取决于您对可读性的个人看法-从其他答案中可以明显看出,有些人比其他人更不喜欢它。(有意思的是,它在生成的代码中得到了广泛的使用-C#5中的所有异步/等待代码实际上都是基于很多getos的)。问题在于,goto倾向于使用的情况倾向于是无论如何重构都可以帮助事情的情况-而goto坚持使用随着代码变得更加复杂而变得难以遵循的解决方案。有没有比使用“ goto”语句更有效的方法来打破主循环?绝对。将您的方法提取到一个单独的函数中:while&nbsp;(ProcessValues(...)){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Body&nbsp;left&nbsp;deliberately&nbsp;empty}...private&nbsp;bool&nbsp;ProcessValues(){ &nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;15;&nbsp;i++) &nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;something &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;return&nbsp;true;}我通常更喜欢这样做,而不是引入额外的局部变量来跟踪“我已经完成”了-尽管当然可以。
打开App,查看更多内容
随时随地看视频慕课网APP