为什么 while(true) 是不好的做法?

Why while(true) is bad practice?

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

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

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

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

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

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

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

嗯,问问那个声称是"a bad idea"的人。

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

如果 while 没有给出任何终止条件,则需要某种其他类型的机制来终止隐藏在循环代码中某处的循环,例如 return、break 或(糟糕 - 基本 -但这可能是语句的起源 - "Goto" 语句跳到循环外的某个地方)以终止循环。

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

问候

阿丽娜

My project leader doesn't allow this kind of loop in my code, he's arguing that it has to be replaced by while(!exit_flag)

这很有争议。 while (!exit_flag) 表明循环有一个自然的退出条件,它将在某个特定点自行到达,例如从 0 数到 100 然后离开循环的东西。但是,如果您正在编写此循环以创建永久守护程序或事件循环,那么此循环的要点是无限期地保持程序 运行。没有什么比 while (true).

更能说明 无限期

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