考虑以下代码段:
int max = 10;
int a = 0;
while (true) {// do a thing that may result in an early return if (++a >= max) {break;}
}throw new RuntimeException("It ran out of attempts");
上面有一些WTF。 循环有点不可思议,控制流似乎在几个地方……但是它的核心是一些编码代码– ++a >= max
在这种情况下,肯定可以进行10次尝试吗? 还是9点? 还是11?
一般情况:
如果您一眼就无法确定逻辑表达式在做什么,那就太复杂了。
碰巧的是,我认为这样做有10次尝试:
-
++a
是一个前缀增量,这增加了1到a
-
>=
表示a
不能为10
或更大,并且在增量之后执行 -
a
从0
开始 - 第一次尝试为
0
,第十次尝试为9
- 所以它做了10次尝试
……可能。
尽管编程语言允许我们使用快捷方式来做事情和表达相同事情的几种方法,但显然可以立即识别for for (i=0; i<10; i++)
样式表达。 编码代码几乎总是可以更好地重构。
循环似乎易于编码 。
翻译自: https://www.javacodegeeks.com/2020/03/mythematical-codey-code.html