コーディングルール

最終更新日28 Jun 2017 12:15

このページは主にC++言語について記述します。

便利にするためのルール

初期化していない変数には-1を入れておく

C言語の場合、値を初期化していない場合不定な値が入っています。
不定な値はプログラムを実行するたびに毎回違う値ということです。
これだとこのエラーなんだろう。。??と小一時間悩むことになってしまうので
わかりやすくまだ値を入れてません印みたいのを決めていれておきます。
大抵の場合は-1を入れておくとわかりやすいです。

メンバ変数にアクセス制限をかける

メンバ変数へのアクセス、publicだと楽だし関数の呼び出しオーバーヘッドが減ります。
しかし、それよりも大事なのがアクセス制限をかけること。
ユーザーが勝手にメンバ変数を書き換えたら動作が保証できない場合は、むやみに書き換えられないようにした方が
使いやすいライブラリになります。
人間、自由度が高すぎると何をしたらよいかわからなくなるのです。
C++の場合constなメンバ変数を宣言したら、コンストラクタの初期化子で初期化しないといけません。
しかし、この変数の値、ファイルを読み込んでからじゃないとわからないんだけど。。(汗)
という困った場合は、その変数はprivateメンバ変数にして、
関数を呼び出すことによってその変数を読めるようにしましょう。こうしてRead-only access状態にするのです。
その場合、そのprivate変数の値を自由に変更できる関数を作ったらprivateにした意味がありません。
まとめると
Read-onlyな変数を作りたい場合

  • public const メンバ変数
  • private メンバ変数 にして呼び出し関数を作る

のどちらかです。

名前に関するルール

名前に関するルールは好みもありますし、基本的には一緒に作業するチームの文化に合わせるのが無難。。と私は思っています。

マイルール

スコープの大きい変数・関数の名前 長くてもいいからなるべく詳しく親切に

長い変数名は書くのが大変ですが、読むときに文章のように理解しやすいです。
行が長くなっても気にしない。大きなディスプレイを使ってデュアルディスプレイで開発しよう!

スコープの接頭辞

さらにVisual Studioが便利になるにつれ、こういうルールは要らなくなってきています。
引数はこの印!と決めなくてもシンタックスハイライトで自動で引数を違う色にしてわかるようにしてくれるからです。
ただこういうルールで書く人もいるってことを覚えておくと人のソースコードを読むときにも便利です。

java風 C++風 ObjectiveC
メンバ変数 m変数名 m_変数名
publicメンバ変数1 小文字スネークケース 小文字スネークケース _変数名
static 変数 s変数名 s_変数名
ローカル変数 小文字 小文字
グローバル変数 g変数名 g_変数名
定数 CAPITAL_UNDERSCORE

型の接頭辞

ブール変数 b
整数 i,n
浮動小数点数 f
p ポインタ

スコープと型、両方の情報を入れるときは
m_bCanFly
s_pHeap
のようにする

関数

関数の名前

小文字から始める(*Window API系は大文字から始まってます)

大文字で始めるのはクラス名なので関数名は小文字にしましょう

動詞+目的語の形にする

boolean値を返す関数はIsやHasで始める

private関数はアンダースコア_で始める

引数の規則

なるべくconst(c++) ,final(java)をつける

この引数は、この関数の中で変更しませんよ、という印です。
出力結果はreturnで出すのが理想的です。
しかしAndroidアプリ(java)の場合、GCの発生頻度を減らすためになるべくnewしない書き方になるので、
出力専用の引数を作ることになるでしょう。そういう場合は引数にfinalはつけません

引数の接頭辞

ここは流儀が色々分かれるところです。私が今まで遭遇したのだと

  • 先頭にaをつける
  • 先頭に_をつける
  • 先頭に$をつける

など色々あるようです。みんな引数を簡単に区別できるように工夫しています。
最近は、シンタックスカラリングが優秀で引数だけ別の色にできるので、まぁ印をつけなくても見分けはつくかなと思います

メンバ変数を1個も使わない関数はstaticにする。

  1. コンストラクタ達
    1. デフォルトコンストラクタ
    2. 普通のコンストラクタ
    3. コピーコンストラクタ
  2. 代入演算子のオーバーロード
  3. その他オペレータのオーバーロード
  4. アルファベット順
  5. デストラクタ

doxygenでグループ分けするなら、必ずしもアルファベット順にならなくてもいい。
ただし、グループの内側はアルファベット順に並べる。

関数の作り方

40行超えるようだったら関数化することを考えること

メンバに何の影響も及ぼさない関数はstaticで!

コードを読む時はこの方が読みやすい

出力結果になる引数は一番後ろ

アノテーション

@Deprecated この関数は利用が推奨されていない
@Override 関数のオーバーライド
@SuppressWarnings どうしても警告を取り除けない事情がある場合にのみ使う なるべくこれが出ないように頑張ること

[JavaPractice.com http://www.javapractices.com/home/HomeAction.do]


coding-style


ファイル

サポートサイト Wikidot.com coding-style