Pythonと++(increment)
PythonへJavaやC++のコードをポート(移植)するメリットはほとんど場合、コードが短くなり、シンプルになってアルゴリズムに集中できるからだ。そして高速にテストが出来るためとても便利である。しかも、最近はBlender 3D上でのシュミレーションも可能で実験するのに便利だ(bulletも含め)。ボクは主にAIやPhysicsの分野で役立てている。 で、ポートの際、バグが入ってしまうのは、instanceのコピーや参照、テンプレート(*)やオーバーロードの問題もあるが、簡単なものでは++iという数式がエラーを発生しない問題がある。 javaやC++で以下の行があるとする。 i=0; ++i; ご存知の通りiは+1されて1になる。 python(2.xや3.x, ボクは現在3.3.2を利用)では。 i=0; ++i; エラーが表示されず、単にiは0のままになっている。 理由は +(+i)と認識し、結果的にiが書かれているとpythonは認識するからだ。 正しくは... i=0; i+=1; と書くと正常にポートできたことになる。(もちろん;は不要、念の為) したがって、++iなどがあればi+=1に全て書きなおすことを忘れないようにしなければならない。 最後に、短いコードではすぐにこの手のバグは発見できるが、 数千、数万行単位になると発見しにくいので注意しなければならない。 P.S. lint( pylint )も役立つと思われる。 例えば以下のようなエラーを表示してくれる。 W:617,12:GameWorld.Render: Statement seems to have no effect E:617,12:GameWorld.Render: Use of the non-existent ++ operator 参考: http://stackoverflow.com/questions/1485841/behaviour-of-increment-and-decrement-operators-in-python ...