はじめに
もっと可読性、メンテナンス性のいいC言語プログラムを書けるようになりたいと思い、下記の書籍を読みました。
- 作者: 藤原博文
- 出版社/メーカー: 技術評論社
- 発売日: 2003/07/12
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 219回
- この商品を含むブログ (60件) を見る
今回の記事は、この書籍を読んで参考になった部分をTwitterでメモしたものになります。
メモ
年末年始で読む予定だったけど、溢れてしまった4冊目をこれから読む!またTwitterメモをツイートしていきます! pic.twitter.com/95wHZe8i8M
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
関数は、最初から最後までを同時に頭に叩き込める長さ、つまり目の届く長さにしなければならない。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
ダラダラとケジメのないプログラムは、動作もケジメなく、バグが取れないものである。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
100行を超えたら「いやだなぁ」と感じろ。200行を超えたら「恥ずかしくて誰にも見せられない!早く直さねば!」と感じろ。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
関数の始まりは、プログラムで一番重要なところ。出来るだけ目立つようにコメントを付ける事。関数名、機能説明、引数説明、注意事項などを綺麗に書いておく。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
無駄な事には努力をしない、「いかに楽するか」に対して努力をする。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
変数名は、出来るだけ意味のあるフルスペルに近いものにする。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
ソースファイルの内部だけに名前を限定し、他に見せるべきでないものには、どんどんstatic宣言をする。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
関数の内部変数をstatic宣言することで、関数実行後もその変数を残すことが出来る。
フラグを多用しない。
— Shisato Yano (矢野 詩知) (@4310sy) January 13, 2019
長い関数を分割する時の作業手順
— Shisato Yano (矢野 詩知) (@4310sy) January 14, 2019
1. とにかく切り出し、もとの箇所に関数名を書く。
2. 切り出した部分を、無理やりでも関数の形に整形する。
3. コンパイルして、エラーを出して、未宣言変数を調べる。
4. 局所的なら関数内部に、でなければ引数に加える。
5. 3と4をエラーがなくなるまで繰り返す。
インクルードファイルに書かれているものをグローバルに、ソースファイルに書かれているものをローカルにして、所在がはっきりと分かるようにする。
— Shisato Yano (矢野 詩知) (@4310sy) January 14, 2019
設計とは、目的の処理をどうやって実現するか、どう関数に分解するか、などの「意図」や「全体の流れ」を書き上げるものである。
— Shisato Yano (矢野 詩知) (@4310sy) January 14, 2019
「設計とは細分化の作業」である。いかに細分化するかが腕の見せ所。
フローチャートは、制御の流れを「もろ」に書けてしまうので良くない。プログラムは、データを処理するためにあり、データの違いによって制御の流れが変更される。
— Shisato Yano (矢野 詩知) (@4310sy) January 14, 2019
変数、引数などをどう定義するかで、プログラムの組みやすさは大幅に改善される。データ構造を図にする方がはるかに役に立つ。
3軸周りの座標変換の実装(x, y, z)
— Shisato Yano (矢野 詩知) (@4310sy) January 15, 2019
各座標に3回座標変換を施すのではなく、3つの座標変換の積を求めておき、それで全座標を一度だけ座標変換する方がよい。
CADやグラフィックスのようなプログラムでは、3次元座標変換などの一連の関数群をきちんと用意し、ライブラリにして、全員で使うようにすることが不可欠である。
— Shisato Yano (矢野 詩知) (@4310sy) January 15, 2019
複数人で開発を行う時にはヘッダーファイルの使用は欠かせない。ただし、全体に共通に使うため、この部分にバグが入ると一瞬で全体にバグの作用が及び、極めて深刻な状態になる。
— Shisato Yano (矢野 詩知) (@4310sy) January 15, 2019
プログラムの信頼性を上げるには、プログラムを短くすることが一番である。そして、無駄なファイルなど作らないことである。プログラムを書かなければ、バグが入り込む余地などない。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
「楽をするほど、信頼性が向上する」
インデントが深くならないコツ
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
if文でエラーの場合を先に処理する。
本来の目的の処理の前でエラーチェックが全て行われると、それ以降は正常処理に集中すれば良くなる。
データは、必ず「本当」のデータをそのまま入れるように心がける。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
本来は違うものを引数で渡し、関数の側で都合の良い型とみなして処理する。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
エディタの機能を抹殺するようなコーディングだけはやめよう。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
プログラムの使われ方を念頭に置いて、信頼度、耐久度、保守性、利便性など、あらゆることを考えた上で、必要なことはしっかりやるが、必要でないことはやらないというのが、正しいエンジニアの姿。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
正しく手を抜けるのが、正真正銘のエンジニア。
師を見つけ、師に追い付いたら、また次の師を見つけるくらいでないと上達しない。師への一番の恩返しは、仕えることではなく、師を追い抜くことである。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
文句が多く、高い要求を出すけれども、ダメなところについてはしっかり理由をいってくれる人がベストである。
— Shisato Yano (矢野 詩知) (@4310sy) January 19, 2019
最新のソースには、できるだけ過去の遺物を残さないようにする。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
プログラムを組めることよりも、どうやったらプログラムが完成するかを追求する。プログラムを書かずに、目的を達成できれば最高である。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
キャストは、あくまで「ごまかし」に過ぎない。せっかくコンパイラがプログラムの欠陥情報を報告しているのに、キャストでそれを出なくするのは勿体無い。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
キャストなどしなくてすむように、いろんな変数などの型を、ちゃんと自然なものに定義する。
行数が多い関数を細分化するには、内容理解の前に理解できる単位に分割することが最初の作業。100行を超えると理解が難しいので、50行以下が理想。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
ifの条件が真の時にエラーとなるようにすれば、ifの直後のブロックが対応するエラー処理となる。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
たとえオープンソースだとしても、その書き方が複雑で分かりにくければ、それはもはやプロテクトである。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
相当面倒な開発をしている場合には、プロファイルの存在は「天の助け」である。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
最適化されていないプログラムのプロファイルを取ると、たった一つの関数が実行時間の過半数を食っていることが多い。
プログラムのテクニック以上に、データ構造の決定の方がはるかに重要である。データ構造の決定を間違えたら、プログラム全体の変更に発展してしまう。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
全体をどう作ろうかという大枠を定め、方針を決めて作っていくことが、昔も今も今後も一番大切な事である。
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019
読了!!これで、目標の4冊全て読み終わった!!
— Shisato Yano (矢野 詩知) (@4310sy) January 20, 2019