先日。Javaで
int begin=getBegin(); int end=getEnd(); for( int i=begin ; i!=end ; ( begin<end ) ? ++i : --i ){ // do something. }
みたいなことを書いたら、コンパイルエラーになった。
エラーは for の行で発生している。
曰く、
Syntax error on token ")", delete this token
Syntax error, insert ") Statement" to complete ForStatement
Syntax error, insert "AssignmentOperator Expression" to complete Assignment
The left-hand side of an assignment must be a variable
とのことだが、何が言いたいのかよくわからない。
で。
言語仕様を調べてみると、なるほどこれはエラーらしいということになり、仕方がないので
int begin=getBegin(); int end=getEnd(); for( int i=begin ; i!=end ; i+=( begin<end ? 1 : -1 ) ){ // do something. }
のように変更した。こちらはコンパイルでき、意図通りに動いた。
つまり、for(a;b;c) の c の部分に書ける式には制限があるということになっているらしい。
実行効率とか可読性とかでどっちがいいってことにはならない程度の変更で済んだので問題ないところではあるが、なんとなく気分が悪かった。