フォーマッタがやる以上の整形はしない

 ↓この記事にツッコミます。

コーディングスタイルの常識をぶち壊せ (1/2):CodeZine(コードジン)

 こういう考えかたもあるというのも理解できますし、私もずいぶん前ですが、そういうことをやっていました。

 でも今はやっていません。変数名のところは、今も少しは考えますが。

 私がコードの見た目に関してやることはフォーマッタで機械的に整形することぐらいです。

 それはなぜかといいますと、人の手でせこせこ整形すると仕様変更やリファクタリングのたびにまたいちいちせこせこ整形しなくちゃならなくなるからです。

 それから、元記事が主観っぽいので私も主観っぽく言ってしまいますが、これまで何万行もコーディングしてきて思いついたのが、そんな「形的な可読性」より、関数化、モジュール化などによる「構造的な可読性」のほうがぜんぜん有用であるということです。

 かつてはコンピュータの性能が低くて、関数を呼び出すオーバーヘッドにすらおびえなければなりませんでした。そしてまた、関数を呼び出すにしてもより高速なレジスタ呼び出しになるように引数を工夫するなどのテクニックが要求されました。そんな時代では、コストにおいてマシンパワーのほうがマンパワーよりも高かったので人間ががんばるしかなかったのです。

 しかし、今はコンピュータの性能があがり、マンパワーのコストのほうが高くなりました。ですから、ばんばん関数化、モジュール化し、信頼性のある関数、モジュールを増やしていくというつくりのほうが時代に即していると私は思うのです。未だに関数化、モジュール化するものとは「みんなが使うもの」「いろんな場所で使うもの」と考える人がいますが、今のマシンパワーならば可読性を上げるためだけに関数化、モジュール化してもほとんどのケースで問題になりません。たとえば、少し複雑なif文の条件ならば、関数化してしまうのです。関数化してしまえば、変数のスコープが狭まる分、不用意に関係のない変数に手を出してバグを作りこむことも少ないですし、テストもしやすくなります(関数に対するユニットテストが行えるという意味で)。こういったつくりをしていくと、1関数、1ブロック内で扱う変数が減少し、それほど見た目にこだわらなくても可読性がそこなわれることはありません。


 それに機械的なフォーマッティングにとどめておけば、コーディング規約も軽くなり、属人性が排除されますので「大規模開発のときどうすんのよ症候群*1」の方々にもご納得いただけると思います(笑)。

*1:コンピュータシステム開発関係の話題が挙がった際、何かと言うと「大規模開発のときに使えない/問題がある」としたり顔でいう人