1文字変数名について

http://d.hatena.ne.jp/tonotonotono/20041111
http://d.hatena.ne.jp/tonotonotono/20050421

昨日、「"ijk"は消えてしまえ」と口にしてみたのですが、同じことを仰ってるひとがいてわらた。やっぱ、1文字変数は良くないですよ…。

    int i;  //カウンタ     /* ←(`д´ノ<見りゃ判るちゅうねん!*/

昔、こんなコメント見てブチ切れたことがありましたが、それと同じですね。俺が知りたいのは、「カウンタ」じゃなくて、「カウンタの使い道」なのに。折角、変数名つう他人に意図を伝える手段があるというのに、それをわざわざ無意味にしてしまう感性が理解できない。まともな変数名も考えられないような状態ってのは、どうせプログラムロジックもあやふやな状態で組み始めてる段階なんだろうから、アプリそのものの品質も疑わしいね。まあ、関数の中にループが1個だけあって、配列かなんかをひと舐めするだけの処理なんかだったら、イディオム的な見た目になるので、許してやってもいいかな、と云う気はする。
が、

    hoge[i][j] = piyo;

みたいのを書いてると、「iとjを入れ違えてしまうバグ」は「必ず発生するもの」なので、やっぱり1文字変数は死すべし。まあ、かく云う私も不精なため、「idx」(index)なんていう変数名はよく使ってます。。。けど、3文字でも1文字に比べると相当違います。あと、変数はこまめに殺すようにしましょう。使いまわしなんてもってのほか。idx系の変数は、ループの中だけでいいはずなので、

   for( int idx=0; idx<length; idx++ );

こういう書き方をするといいかもしれません。が、実は、コレやるとforスコープから漏れるので

    {
        for( int idx=0; idx<length; idx++ );
    }

こう書かないとダメだったりしますが。


2重ループとかどうするのさ、とか云われたりしますが、それだったら

    hoge[x][y] = huga;

x, yだけは、1文字変数でも許してやってもいいかな。「座標」つうわりと特殊な用途があるから。まあ、万全を期すなら「何の」座標なのか変数名に入れるべきでしょうな。3重ループはz使ってもいいけど、それよりも3重ループなんて使うロジックを先に疑った方がいいと思います。

あとは適当に関連して思い浮かんだ事項としてはーーー

  • 条件分岐やループのネストなんかは3段くらいが限界かなぁ。そんなん書くロジックを先に疑った方がいいだろうし、それくらいだったらgoto使った方がマシな気もする。
  • プログラムシーケンス中、同時に使用する変数は8つまで。局所変数は4つまで。それを超えそうならスコープで殺してくれ。俺は3つまでしか数字を覚えてられないんだ。
  • ロジック中に突然出てくるマジックナンバー(意図の謎な定数)も根絶していい。せめてマクロに。一部でしか使わないなら、局所スコープのconst変数で。不要になったら即殺す。

こんな感じですかね。まあ、自分も遵守してるか?つうと疑問ですがw