作者sbrhsieh (sbr)
看板java
标题Re: [问题] while回圈问题?
时间Sun Mar 8 01:21:32 2009
※ 引述《macbuntu (邀怪)》之铭言:
: 大部分人喜欢用 while (true) { .... } 但我比较喜欢 for (;;) { ... }
: 从 Java 语法的语意上来看, 这两种写法其实有一点小小的不同:
: while (true) 的 true 仍然是一个完整的 Java Expression,
: 是要运算然後测试结果的 boolean value, 只是刚好结果永远固定.
: 而 for (;;) 的 (;;) 里面完全没有 Expression 需要运算, 也不需要测试.
: 换句话说, 其实是要靠 compiler optimization 把 while (true) 的 true 运算省略
: 才会得到跟 for (;;) 一模一样的结果.
: 实务上, 最笨的 compiler 也会知道可以把 (true) 拿掉, 所以其实完全没差,
: 但我自己就看 for (;;) { ... } 顺眼一点 :P
你的说法有道理。
但你不觉得不管从 C/C++/Java 的语法来看,for(;;) 其实蛮没 sense 的,只能以
特例来解释。
The Java Programming Language, 4th edition 中有提到:
for (initialization-expression; loop-expression; update-expression)
statement
If loop-expression is left out, it is assumed to be true.
我想可以解读成:如果没有 loop-expression,编译器把他当作是 true。
以这种方式来解释 for(;;) 是正确的语法,实际上是政策考量。(为甚麽不以同样
的方式,把 while(){...} 也订定为正确的语法?)
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.173.136.81
※ 编辑: sbrhsieh 来自: 218.173.136.81 (03/08 01:22)
※ 编辑: sbrhsieh 来自: 218.173.136.81 (03/08 01:25)
1F:推 macbuntu:Java 在这可能只是沿用 C/C++ 语法的习惯吧? 03/08 02:14
2F:→ sbrhsieh:这就是我所谓的【政策考量】 03/08 02:36