Riverside Learning LABO(Skill/Idea/Code)

よりよいシステムのため工学系と人間系の学習下書きメモ

プログラミング作法1

第1章 スタイル
基本原則は簡潔性、明両性、一般性
低レベル階層の仕組みを理解するのは有益だ


・よいスタイルは習慣の問題である
・グローバルには分かりやすい名前、ローカルには短い名前
(インデックスの i,j、ポインタの p,q、文字列の s,t など)
・関連性のあるものは統一した命名をする
(queue、Q、Queue などと併用しない、bool を返す is・ など 関数には能動的な名前(動詞 + 名詞)を付ける)
・名前を的確にする
・構造が分かるようにインデントする
・自然な式を使う
(条件式を否定演算(!)ではなく、肯定となるように記述)
・カッコを使って式の曖昧さをなくす
(優先度の高いオペランド同士をくっつけて書く)
・複雑な式を一文にまとめず分割する
・明快に書く (小賢しいコードを書かない)
・副作用に注意する
・インデントとブレースのスタイルを統一する
(作業内容が常に同じ方法なら、それが違うだけで注目できる)
・言語の慣用句によって一貫性を確保する
(gets ではなく fgets を使う、strlen は \0 を含めず strcpy は含む、
多分岐に else-if を使う (可能性の高いものから記述))
落下シーケンスのcase文はきちんとbreakしよう
・関数マクロはなるべく使わない (C++ ならインライン関数で代替)
・マクロの本体と引数はカッコに入れる
マジックナンバーには名前を付ける (原則として 0/1 以外の全て)
・数値はマクロではなく定数として定義する
(define ではなく enum や const にする)
・整数より文字定数を使う
(0 をヌルポインタなら (void*)0 や NULL 、文字列終端なら \0 で区別、
0 はリテラルの数字 0 で使う)
・オブジェクトサイズは言語に計算させる
(sizeof(array)/sizeof(array[0]))
・当り前のことをいちいちコメントにしない
・関数、グローバル変数、定数定義、構造体・クラスメンバにはコメント
・悪いコードではコメントを付けるのではなく書き直す
・(修正があっても)コードと矛盾しないコメントを維持する
・あくまでも明快に、混乱を招かないコメントにする
(難問を増やすのがコメントの目的ではない)