プログラミング作法[メモ]

プログラミング作法

プログラミング作法


データ構造がプログラムのすべて、といっても過言ではない
データ構造が分かれば、プログラムがどんな処理を行っているのか大体想像がつく

1章 スタイル
1.1 名前
ブール値を返す関数の場合は、戻り値が不明確に
ならないような名前をつける
1.3 一貫性と慣用句
strlenは終端文字をカウントに入れないが、
strcpyは終端文字もコピーする、この点の違い
1.6 コメント
悪いコードにコメントを付けるな、書き直せ

2章 アルゴリズムとデータ構造
ソーティング
O記法
Mallocの違い
ハッシュテーブル
ツリー構造

3章 設計と実装 なし

4章 インターフェイス
4.5 インターフェイスの原則
実装の詳細を隠蔽する(カプセル化、抽象化、モジュール化)
ユーザに内緒で何かをするな(勝手にファイルに書き込んだり、
グローバルデータの中身を書き換えたりしない)

5章 デバッグ
5.2 有力な手がかりのある簡単なバグ
打つ前に読め(コードを舐めるように読んで、
変更を施さずにしばらくよく考えること)
自分のコードを他人に説明してみる(ぬいぐるみでも)
5.3 手がかりのない困難なバグ
記録をとる(どんなことを試し、どんなことが分かったのか記載する)

6章 テスト
防御的プログラミング

7章 性能
最適化するな(プログラムはもう十分に優れているのではないか?を確認)
7.1 ボトルネック
ボトルネックホットスポットをさがす
7.3 高速化の戦略
より優れたアルゴリズムやデータ構造を利用しよう
コンパイラの最適化を有効に
関係ない部分を最適化するな
7.4 コードのチューニング
共通する式をまとめる
高価な処理を安価な処理に置き換える
ループは展開するか除去する
頻繁に使われる値をキャッシュする
専用のアロケータを用意する(大半が同一サイズのブロックを要求するなら、
専用のアロケータをつくり、そいつがmalloc一回であらかじめでかい領域を
確保しておいて、ユーザはそれを呼び出して専用のアロケータは
小分けにしてポインタ?渡せばよい)

8章 移植性
8.1 言語
評価順
Charの符号の有無
8.3 プログラムの構成
条件コンパイルは避ける(あちこちに分散しちゃうから)
8.4 隔離
システム依存のコードは別個のファイルに
システム依存部分はインターフェイスの裏に隠蔽しよう
8.5 データ交換
データ交換にはテキストを(どんな言語・ツールでも扱いやすいから)
8.6 バイト順
ビッグエンディアンとリトルエンディアン

9章 記法 なし