1文字変数

たまに見かける。
おいらはこれが嫌いだ。


コーディング規約を作る際に心がけていることがある。
「ネコにでもわかりやすい」
変数一つにしてもどんな役割か、どんなスコープかがわかる。
オブジェクトにしてもどんな役割か、どんなスコープかがわかる。
コメントが無くてよいはずは無く、
データ格納型の変数に至ってはその型をも表すようにしたい。
メソッド名もまた然りである。


それらを決める際には「どんなのがわかりやすいか」
「どうあれば親しみやすいか」
「どうやったら言語に触れたての人にもっつきやすいか」
等などを考慮する。
追加人員が来たときに必ず取られる教育期間を1分1秒でも短くするためである。
*1


そして慣習で作られているネーミングに至っても、
「それを行う事のメリットはどこにあるか?」を考慮する。


「開発時」、「保守時」、「仕様変更時」の三つを考慮材料に入れ、
原則として「開発時」のみに有効な
(´∀`)<開発時に楽だから
っという意見は却下する。
楽して作ったソースは後に響く。
コピペだけで作られたソースの保守は至極面倒くさい。
つぎはぎで作られたソースの仕様変更など自殺行為だ。
開発時に後の必ず発生する工程を考慮しておかねば
それらは回避できない。


前提が長くなったヽ(´ー`)ノ


「1文字変数はよくない。」
これは大抵のプログラマは賛同してくれる。
が、しかし、
「ループカウンタのi、j、kは例外」
こういうプログラマも多くいる。


(,,゜Д゜)<後々を見越したメリット言うてみぃ?


今のところそれに答えられた奴はいない。
  1.「いやそれくらい慣習やしいいやろ」
  2.「暗黙の〜なんたら。ってやつですかね」
  3.「それでワカラン奴はプログラマ辞めたほうがいい」
  4.「スコープ短かったらそれでええやん」
ってな事に似たり寄ったり。


まず1,2は考えることを拒否しているから却下。
3は実力を誇示したいのだろうが、誇示するべきはそんなちんけな事でなく、
アルゴリズム構成面で発揮してくれといいたいのに加えて、
質問の答えにはなってないから却下。
4も「自分が楽したい」って、言っているので却下。


正直、実力の高いやつならどうでもいいと思っている。
それでロジックが破綻することは無いからである。
破綻する奴は実力があるとは言わない。
しかし。
業務アプリケーションにおいて。
開発時と保守時や仕様変更時にソースを触る人間は違う。
ビギナーな奴が作業に当たることすらある。
そんなときにどうなるか?
追加機能はもとのソースの該当個所をコピペして作るものだ。
ソース丸ごとコピペである。
そしてそこからべた書きで機能を盛り込んでいく。
立派なクサレソースの出来上がりだ。
スコープが短かった「i」も200行くらい生きることになっちゃったりする。
これでは1画面内で収まらん。


↑こーゆーのを夢物語とか考えすぎと思うそこの君(・ω・)oビシッ
今まで14社25プロジェクトのソースと人員を見てきたおいらは経験でものが言える。
やる奴はいる(゜Д゜)クワッ!!
っつかいたっ(゜Д゜)クワワッ!!!


一番酷いのは、iをえらい長いfor文の中で使った挙句に、
とあるルートだけiを書き換えていたとかいうの。
純化すると


for(int i=0;ii=j+2;
      }
    }
    処理4等々
  }
}
実際はこのfor文が300行、if文はもっとおおく、ネストの嵐。
2重ループどころか3重ループもあるような代物。
そのなかのたった1行、たった1文。
「すでに動いているプログラムがおかしいことがある」
ってことで探していたのだけれども、
2日間かけて、とうとうこれを見つけたときには
 (#゜Д゜)<これ作ったヤシ見つけたら頃ス
っと思ってしまったもんだ。


ループカウンタで検索かけても当時は現場。
現場にはテキストエディタしかない。
そんな状況で一文字変数など探せるわきゃねぇ。ヽ(´ー`)ノ


っとま〜そうならないためにも。
そうさせないためにも。
せめて「intI」であったらもっと楽だったのにという思いも含めて。
一文字変数のメリットを知らしめられない限り受け入れることはない。
あほらしかろうがプリフィクスくらい付けやがれと言いたい。


最近改めてJavaのコーディングルールをみてみた。
相変わらずループカウンタは「i,j,k」をよりにもよって推奨していやがる。
しかしてまだそこに納得の行く理由はなかった。

*1:往々にして追加人員が遣される時は、悠長な時間が無いことが多い。