【问题标题】:Why while(true) is bad practice? [closed]为什么 while(true) 是不好的做法? [关闭]
【发布时间】:2015-06-21 04:24:10
【问题描述】:

我在许多项目中都使用 while true 循环。它对我很有帮助,而且并不过分复杂。那么,为什么使用 while true 循环无限运行后台进程是一个坏主意。感谢您的回答。

【问题讨论】:

  • while (true) 本质上并不是坏习惯。 while (true) 的某些用法是不好的做法,主要是忙等待,而其他类型的等待更合适,但 while (true) 本身并没有错。
  • 你为什么说这是个坏主意?
  • 只要你知道自己在做什么,并且有一个干净的方法来摆脱它,这不是一个坏习惯。
  • 一开始是什么让你觉得它很糟糕?
  • 我的项目负责人不允许在我的代码中使用这种循环,他认为必须将其替换为 while(!exit_flag)

标签: loops while-loop


【解决方案1】:

这不是一个坏习惯,它只是意味着你没有仔细考虑你的代码。

需要条件来告诉循环何时结束循环。如果你有一个终止点,那为什么不把它作为一个条件呢?

var i = 0;
while(true){
   i++;
   if(i == 100)
      break;
}

这是很好的代码。但也是这样:

var i = 0;
while(i != 100){
   i++;
}

这两种方法都是正确的,但如果其他人正在阅读您的代码,则更容易看出循环何时停止迭代(如果它正好在条件中)。

【讨论】:

    【解决方案2】:

    嗯,问问那个声称这是“一个坏主意”的人。

    我能想到的是,任何无限期运行的循环都必须在某个时刻结束,当然,除非您希望您的程序永远运行。

    如果 while 没有给出任何终止条件,则需要某种其他类型的机制来终止隐藏在循环代码中某处的循环,例如 return、break 或 (yuck - Basic - 但这可能是语句所在的位置origins - 一个“Goto”语句在循环外跳转)以终止循环。

    这样的代码可能难以阅读和调试,以前表明程序员不太关心编写干净的代码。尽管如此,如今对于事件驱动的应用程序和结构化错误处理(请参阅 try ... catch 结构),有干净且易于阅读的方法可以随时退出任何类型的循环,因此可以轻松使用 while (true)。

    问候

    阿丽娜

    【讨论】:

      【解决方案3】:

      我的项目负责人不允许在我的代码中使用这种循环,他认为必须将其替换为 while(!exit_flag)

      这是非常值得商榷的。 while (!exit_flag) 表明循环具有自然退出条件,它将自行到达某个特定点,例如从 0 计数到 100 的东西,然后离开循环。但是,如果您正在编写这个循环来创建一个永久的守护程序或事件循环,那么这个循环的目的就是让程序无限期地运行。没有什么比while (true) 更能说明无限期了。

      两者之间没有真正的技术差异;这只是可读性和意图表达的问题。当然,您必须与最终将阅读该代码的人保持一致。如果他们的政策是while (!exit_flag),那就这样吧。

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 1970-01-01
        • 2014-02-28
        • 1970-01-01
        • 2014-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        相关资源
        最近更新 更多