変数は参照する前に値を代入すべし!
高木です。おはようございます。
世の中には変なコーディング規約があるものです。
ときどき、そんな変化コーディング規約を紹介していますが、今回のそのひとつとなります。
タイトルの通り、
変数は参照する前に値を代入すべし!
です。
このコーディング規約が想定しているのは、おそらくCだと思います。
他の言語の中には必ずしも当てはまらないものがあるかもしれませんが、今回はあくまでもCを基準に考えたいと思います。
まず、根本的な問題として、参照せずに代入することはできるのか? ということです。
変数を参照するからこそ代入できるのであり、参照することなく代入することなど不可能です。
この時点で、このコーディング規約は破綻しています。
次に、なぜ代入しなければならないのかです。
代入と初期化は、類似してはいますが別の概念です。
初期化子を用いて初期化することは代入ではありませんから、このコーディング規約では初期化だけでは不十分で代入するように指示しています。
そうすることに合理的な理由があるのか、まったくの謎です。
こういう話をすると、必ず次のようにいう人たちがいます。
そういう厳密な話ではなく、常識的な範囲で適用すべきですよ。
申し訳ないですが、常識的な範囲というのは私にはわかりません。
ルールというものは、誰が見ても同じ解釈に至るように定義すべきであり、各自の常識に依存するものであってはならないと考えます。
主観的な解釈を必要とする時点で、ルールは機能しなくなっています。
どのようにコーディングすべきかが明確でないコーディング規約ほど害になるものはありません。
あいまいで、主観的な解釈に依存するようなコーディング規約は、パワハラの温床になることさえあります。
そんなコーディング規約であれば、いっそのこと何もないほうがマシというものです。
ルールというのは「厳格に適用するもの」であり、本来はひとつの例外も認めるべきではないのです。
そのため、ルールを定めるのはそれなりに骨が折れる作業であり、決めた以上は軽視すべきものではありません。
さまざまなシチュエーションを想定し、厳密なルールを定める必要があります。
場当たり的にいい加減なルールを定めることほど害になることはありません。
このように考えると、コーディング規約を制定する立場の人物は、プログラミング言語やアプリケーション領域について、深い理解と知識が必要であることがわかってきます。
とりあえず義務的に作ったコーディング規約は、よくわかっているプログラマーにとっては簡単に回避できます。
しかも、回避することによって、経験の浅いプログラマーには理解できないコードになるかもしれませんが、そうなってしまうのはくだらないコーディング規約を作った人物の責任です。
自ら作成したコーディング規約が、あくまでも初心者向けのものであり、熟練したプログラマーには適用すべきではないことを理解している方もいます。
実に現実的な判断だと思いますし、そのような方とは現実的な折り合いもつけやすいのです。
しかし、世の中にはいろんな人がいます。
(おそらく)自分ではコーディング規約が意味するところを何ら理解せず、金科玉条のごとくそれを順守させようとする人もいます。
お互いの不幸の始まりといわざるを得ないでしょう。