使用"伪运算符"来区分简单重复与一般循环

pol*_*nts 2 java for-loop

我想知道其他人对以下编写for循环的方式的看法:

for (int rep = numberOfReps; rep --> 0 ;) {
   // do something that you simply want to repeat numberOfReps times
}
Run Code Online (Sandbox Code Playgroud)

我发明这种风格的原因是为了区别于更一般的for循环情况.当我需要简单重复的东西我只能用这个numberOfReps时间和循环体不使用的值rep,并numberofReps以任何方式.

据我所知,例如标准Java没有简单的说法"只重复N次",这就是我想出这个的原因.我甚至会说循环的主体不能continue或者break,除非在for循环的顶部明确记录,因为正如我所说的那样,整个目的是通过提出一个独特的方法使代码更容易理解用来表达简单重复的风格.

我们的想法是,如果你正在做的是不是简单的(上/一inreasing的价值下降指数,相关性breakS,continueS,等等),然后用标准的for循环.如果你在做什么简单的重复,而另一方面,则这个独特的风格传达了"事实"(一旦你知道的风格为目的,当然).

我说"事实",因为这种风格当然可以被滥用.我的运作假设你有能干的程序员,他们的目标是让他们的代码更容易理解,而不是更难.


发表了一条评论,其中提到了for仅应用于简单迭代的原则,并while应另外使用(例如,如果循环变量在体内被修改).

如果是这种情况,那么我只是扩展这个原则来说如果它比你的简单for循环更简单(即你甚至不关心迭代索引,或者它是增加还是减少等等,你只是想重复做N次),然后使用闪烁箭头for循环结构.


多么巧合,Josh Bloch刚文如下:

  Goes-to Considered Harmful:

  public static void main(String[] a) {
    int i = 10;
    while (i --> 0) /* i goes-to 0 */ {
      System.out.println(i);
    }
  }
Run Code Online (Sandbox Code Playgroud)

遗憾的是没有给出任何解释,但似乎至少这个伪运算符有一个名字.之前在SO上也讨论过:这个运算符的名称是什么:" - >"?

Lau*_*ves 6

你有与语言无关的标签,但这个问题与语言无关.如果用你的语言做了n次做事已经没有完善的习惯用法,那么这种模式会很好.

你接下来提到Java,它已经有一个成熟的习惯用于做n次:

for (int i = 0; i < numberOfReps; i++) {
   // do something that you simply want to repeat numberOfReps times
}
Run Code Online (Sandbox Code Playgroud)

虽然你的模式同样有效,但却让其他人感到困惑.当我第一次看到它时,我的想法是:

  1. 什么是奇怪的箭头?
  2. 为什么那条线对我眨眼?

除非你开发出一种比标准习惯具有显着优势的模式,否则最好坚持使用标准,这样你的编码人员就不会最终挠头了.

  • 是的,但是你也可以使用指向眨眼构造完成所有这些事情.如果问题是`continue`和`break`,那么就有一个阻止它们使用的约定.此外,似乎常识是乱搞循环限制和计数器将是一个坏主意.就个人而言,我很少使用`continue`,并且如果我需要使用`break`,则倾向于使用`while`循环而不是`for`循环.同样,如果我需要操纵循环限制或计数器,我倾向于使用`while`循环. (4认同)