【发布时间】:2014-01-14 09:30:57
【问题描述】:
好的 - 所以也许我累了,但我正在尝试找出一种方法来执行以下操作(看起来……更……优雅?)
- 我有一个布尔值(我们称之为
loopTwice) -
loopTwice被循环内容使用(并修改其行为)以执行互斥功能 - 如果
loopTwice为真,我希望循环执行两次,首先值为真,然后值为假 - 如果
loopTwice为假,我希望循环只执行一次,值为假 -
loopTwice在循环之后没有使用,所以最终值是什么并不重要
...这似乎有足够的意义,但出于某种原因,我的大脑没有想出比 while 循环更优雅的方法,该循环在结束时有一个 if 条件并带有一个中断:
// loopTwice is already set as true or false
while (true) //this seems ugly, not to mention breakable...
{
DoThis(loopTwice); //these act slightly differently based upon loopTwice
DoThat(loopTwice); //these act slightly differently based upon loopTwice
DoAnotherThing(loopTwice); //these act slightly differently based upon loopTwice
if (!loopTwice) break;
loopTwice = false;
}
这段代码(嗯,不是这段代码,而是等效代码......)完全按照我的意愿工作,无需提供另一个变量(我想这不是一件坏事,但我看不到使用另一个变量任何比这个更优雅的循环...)
在我看来,我必须缺少一些东西(如果某事为真,则循环两次,如果某事为假,则循环一次,“假”值始终是最后一个 - 最好没有第二个变量,例如一个计数器或第二个标志来指示循环已经运行一次)。
使用计数器或标志实际上更优雅吗? (我想对于过去几十年的计算机,它并没有真正冒破坏内存要求或任何东西的风险,是吗......)。将其分解为一个函数并使用递归会更优雅吗?嗯……
优雅,当然,在旁观者的眼中......
【问题讨论】: