俺コーディング規則
ある程度の期間プログラマーをされている方ならきっと持っているだろう「俺コーディング規則」。一応、私自身もプログラマーの端くれなので持っているのですが実はかなりぶれぶれです。
クロスプラットフォームなマルチスレッドライブラリの実装をしている最中にいきあたった「俺コーディング規則」、いくつか意見が合わなかったところもあるけれど、基本的にはとても同意できる規則だったので紹介。
http://d.hatena.ne.jp/tt_clown/20090620/p1
私が基本的に意識しているところは
- 基本的にクラス名はCStringのように頭にCをつけ、抽象クラスの場合にはInterfaceのIをつけます。(これは多分私以外していないかもです。)
- メンバ変数にはm_を頭につけ、引数と区別します。おおよそ例外無くprivateにし、必要ならばGetとSetを実装します。GetやSetはinline関数にします。
- メンバ変数の三つ目の文字はおおよその型を指定します。(bool b,数字 n,ポインタ p,const char* cかp,std::string str,std::vector vec,std::map mapなどなど。)例えば float m_nPi = 3.14;float* m_pPi = &m_nPi;などなど。
- メンバ関数についてはprivateは頭を小文字に、publicは大文字にします。
- コメントは定義ファイルにかき、"Doxygen Style" でかきます。(ライブラリの公開を前提としていないため。)
- 変数名や関数名は名前が長くなってもよいのでなるべく何をしているのか明確な名前にします。大文字、小文字で区切りを指定し(ex IsWindows();)アンダーバーは使わない。
- マクロは大文字のみ、インクルードガードとOS判別、デバッグフラッグ以外は使わない。
- 固定なグローバル定数はマクロを使わずconst定義にする。
- namespaceの終了時や#endifの終了時は、何を終了したか明示する。
といったところでしょうか。
using namespaceを何も使わない、などといった、あまり意識していないところがかかれていて学ぶところが多かったです。
ぜひ、自分の「俺コーディング規則」と比較してみてくださいな。