ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

コーディング規約なんていらない

先に「テストを本当に書いてる奴なんているんだな」を書いた。これに関連することであるのでついでに書いておく。

世間には「コーディング規約」と言う馬鹿らしい規則が乱立している。ブロックのインデントはどうするだの、ブレースはどの位置に書くだの、一行はは何文字までにするだの無茶苦茶だ。この規約をプログラミング言語が定めているものもあるが、大多にして利用者はその規約を自社に合わせて変更して利用している。

自社に都合がよく曲げている時点でそれはオレオレルールであるので役に立たない。そもそも自社に都合がよく曲げているのであれば、規約など作らずに柔軟に作らせればいいではないか。

私がよく思うのは「プログラミング言語自体がその言語仕様の中にコーディング規約を埋め込んでくれないかな」と言う事。

 

実践Javaコーディング作法 プロが知るべき、112の規約と21の心得

実践Javaコーディング作法 プロが知るべき、112の規約と21の心得

 

 

改訂版 組込みソフトウェア開発向けコーディング作法ガイド[C言語] (SEC BOOKS)

改訂版 組込みソフトウェア開発向けコーディング作法ガイド[C言語] (SEC BOOKS)

 

 ====

例えば私がPythonを使い始めたのも、Pythonがインデントブロックを使っていることに魅力を感じたことがひとつだ。そうすればブロックのブレースを行末に置くか行頭に置くかなんてどうでも良いし、どこをインデントしてどこをインデントしないかなど考える必要もない。

「効率化」だの訳のわからない理由で条件分岐や繰り返し文の末に文を書く人間も出てこないし、そもそも繰り返し判定文内で何らかの処理をさせたり、繰り返し分を繰り返し以外の目的に使ったりもしない。

いや「しない」ではなく「できない」。Pythonでも無理をすれば1行プログラミングは可能になるが、それはかなり特殊な書き方をしなければならないためにそれをあえてしようとする人は止められない。C言語でも無駄にインラインアセンブリを書くアホが発生する環境は防ぐことができないという事と同じだ。

このようにプログラミング言語自身がコーディング規約が生まれ得ない構造になっていればアホな連中が騒ぐことがない。言語自体がコーディング規約になっているのだからそれをあえて曲げようとする人はいないだろう。

それは「規約が不要になる」というメリットだけではなく、そもそもにそれをどう書くかということを「考えなくて済む」ことにもつながる。コーディング規約があればそれに違反しないように気をつける必要があるために無駄な思考が発生する。そしてそれに違反しないように書きたいコードと違うコードを書く必要がある。これは無駄な労力と無駄なストレス、無駄なコストをかけてしまう。

だがプログラミング言語自体がそれを持っていれば考えることはないのだ。そのプログラミング言語を使って書くには「そうするしか無い」のであるから、何も考えずにプログラミングするだけでコーディング規約を守ったコードを書くことになる。


そもそもコーディング規約の大部分は過去の遺物に囚われた現在ではなんの意味もない無駄なものが多い。

例えば1行を80文字までにするというのもパンチカードの時代の名残だ。ループ内の一時的なカウンタ変数をiやjにするというのも稀に見るがあれもFORTRANの名残だ。その本来的な意味も知らずに現在もそのまま使い続けられている。過去の慣例に習って使い続けられているのだ。

たとえば今現在のコンピュータ環境では1行80文字という制限は無駄どころか邪魔な制限でしか無い。それに縛らられることで無駄なコードを書くことになり、そもそも今の4Kというディスプレイも一般に使われている時代からすれば1行80文字など画面の無駄だ。ワイドモニタが主流の現在でも80文字などモニタの半分にも満たないがためにIDEのサイドパネルを目一杯開きコードを中央に持ってくるという工夫が必要になってしまう。

そもそもにIDE自体がその無駄な領域を使うためにサイドパネルを量産しているとしか思えないほどの構造になっている。

どのようなプログラマにしても1行80文字という規約が邪魔であることには同意いただけるであろう。どのように工夫したとしても、パラメータの多い関数や、そもそも変数名をわかりやすくしていれば条件分岐さえもその制限に引っかかる可能性がある。なにしろインデントを4文字にして入れば、クラス中のメソッドのループ中の条件分岐なら、それだけでインデントが12文字も締めてしまう。そこに10文字程度の変数名の比較を2個入れればそれだけで80文字の制限に触れてしまうことがある。

なぜそのような邪魔な制限をあえて作り実行しなければならないのか。

 

実体験にしてもJetBrainsのWebStormを使っていてHTMLの自動インデントをしてちびった経験がある。HTMLすらも80文字の制限に引っ掛けて自動で改行を入れやがるのだ。

HTMLで80文字などいかにすぐ超えるかわかるだろう。ブロックをいくつか入れているだけでインデントがものすごい量になるし、クラスやID属性、フォーム要素ではrequiredやpatternなどの標準的な属性を入れているだけですぐに80文字を超えてしまう。

これが改行されることで読みやすくなるというのであればまだしも、HTMLで複数の行にまたがったタグは非常に読みづらい。例えば画像を縦に並べているコードで改行されれば一覧性が悪い上に複数行の矩形挿入もできなくなってしまう。


やはりコーディング規約が生まれ得ないプログラミング言語が素晴らしい。