2007-09-30

"C++ Coding Standards" Herb Sutter & Andrei Alexandrescu 著

じっくり読もうと思っていても肌が合わなくてパラパラっとめくって終わるものもあれば、その逆もある。本書はその逆のパターンである。それもいい感じで酔えるからである。
アル中ハイマーは、規則を固めるよりもメンバーの意識を共有できる方が効果が高いと思っている。特に、大組織に支配されるような宗教じみたコーディングルールに縛られることは嫌いである。それは、規則を守りたくても守る能力がないからである。アル中ハイマー病とはそうした病である。ただ、メンバーに共通意識を持たせるための手段としてガイドラインを提示するのは良いだろう。手段を目的と勘違いしていることはよくある。前書きにこう記されている。
「良質のコーディング標準は、単なるルール以上の良い習慣や原則を育てる。」
本書は、C++言語固有の作法に留まらず、組織運営、設計スタイルなど、チームの共通意識として持っておきたい事なども記されている。アル中ハイマーには昔からのC言語の癖がしみついているようだ。こうした古臭い作法にも気づかされる。かなり高度なものもあるが、酔っ払いでも参考にできる部分が多い。
また、当り前かもしれないが、前記事のスコット・メイヤーズ著「Effective C++ 第3版」と重複している項目も多い。では、せっかくのアドバイスを忘れないうちに、ざっとメモっておこう。

1. 時期尚早な最適化は行わない
どのコードが速くあるいは小さくなるか?どこがボトルネックになっているか?といった判断をプログラマはひどく苦手にしていると語る。CPUは複雑化しており、その上にコンパイラがいる。コンパイラもハードウェア性能を引き出すよう最善を尽くす。このような複雑な仕組みの頂上にプログラマがいる。よって最適化は測定と分析が必要である。また、CPUのみならず、メモリ、ネットワーク、周辺装置、データベースなど周辺環境も含めて総合的に判断しなければならない。部分的に最適化されても、全体としての効果がなければ意味がない。まずは、すっきりしたコードを書くことに専念すべきである。

2. 実行エラーよりも、コンパイルエラーとリンクエラーを歓迎する
コンパイラがチェックしてくれるようなコードを書くように薦めている。動的チェックも大切だが、静的チェックも利用しようということである。

3. 変数は全て初期化しよう
配列も、char path[MAX_PATH] = {'\0'}; 全ての文字を0で埋める。

4. 基本クラスとして設計していないクラスからは継承しない
子供ができることを好まないクラスもあるだろう。といっても、誰かに勝手に継承されることはある。完全に避妊する方法ってあるのだろうか?クラスの設計とは、型(子供)を設計しているようなものである。

5. 安全なオーバーライドを見に付けよう
オーバーライドは明示的にvirtualを指定して再宣言する。基本クラスにあるオーバーロードが隠蔽される場合もある。派生クラスにusing宣言すれば隠蔽されたものが使える。

6. 静的ポリモフィズムと動的ポリモフィズムを賢く組み合わせよう
動的ポリモフィズム?コンパイラが判断するのだから静的ではないのかい?
動的ポリモフィズムは、仮想関数を持つオブジェクトをポインタや参照により間接的に操作する形で生じる。アル中ハイマーは、どんな型がこようとも、発酵型だろうが蒸留型だろうが受け付ける。特に熟成型に弱い。

7. STLコンテナは決まった目的がなければ、まずvectorを使おう
更に、シーケンスに要素を追加する時は、どこでもいいならpush_backを使おう。いきなり唐突な表現である。このぐらいの言い分の方が、ド素人のアル中ハイマーにはありがたい。おいらが使うのも、vectorかstringぐらいなものである。

これで、今月の目標だった、積みあがった専門書20冊ほどの処理が終わった。すっきりした気分で温泉旅行に行けるというものである。真面目に読んだのは数冊だったような気がするのは、酔っ払いの錯覚である。呪文を唱えてスピリタスを一気に飲み干せば96%の仮想空間は現実となる。

0 コメント:

コメントを投稿