俺的コーディング規約
About
個人でプログラムを書いていたところで、オープンソースとして公開したり、リファクタするに伴ってコーディング規約を設ける必要が出てきた。ここでは個人的なコーディング規約についてメモしておく。
基本指針
- 例外は少ない方が良い
- ルールが多いと本質であるロジックの方に注力できない
- 言語固有の慣習に縛られない
- 言語の仕様や慣習に縛られると例外が増える
- "このようにも書ける"、"省略できる" は要注意。どちらかに揃える。
- よほど冗長なパターンでなければ省略しない方が良い。
ループカウンタ
for などの繰り返し構文に用いるカウンタに i, j, k, などの変数名は用いて良いものとする。ただし、それよりも相応しく、十分に短い変数名があれば代替しても良い。例えば画像などの座標処理における x, y やテーブルの処理における row, column である。
コードブロック
if, else, for, foreach, while などのコードブロック記号 (例えば"{") が省略可能必要なときも省略しない。
利点はコードブロックを書くべきかどうかを判断しなくて良い点にある。省略を許可するとき、例えば次の2つのシチュエーションに問題が起きる。
- if の場合に省略できて、else の場合に省略できない。(不自然なコードになる)
- 対象の1行のコードが長い関数であり、折り返したり改行を含む場合。(不自然なコードになる)
補足
省略するようなコーディングルールを設けると、例えば次のようになる。コーディングルールが急増する。
- それらが1行で完結するときは省略しても良い。
- for>if など、それぞれが1行で完結するときは、最後のネストのみ省略してよい。
- if/else は両方が1行で完結するときは省略してよい。
- 片方が省略できないときは、もう片方も省略しない。
bool 演算
bool を返す演算では次のようなルールを設ける。
- 基本的には肯定的な意味で変数や関数(メソッド)に名前を付ける。
- if 文などで否定演算子!を使わない。if( isTrue == false) にする。
- 可読性のため、否定演算子1文字は読みにくい。
命名
略称について
現代においては略称は可能なかぎり使わない方が良い。略称を行うと、あらゆる場面で略称を考える必要が出てくる。略称の条件、略称の仕方、略称の衝突回避、の少なくとも3つのコーディングルールを増やすことになる。したがって、可能な限り略称を使わない方が良い。IDE のサポートが受けられるのであれば、使うべきである。
補足 ただし、インスタンス変数やローカル変数については、慣習的に略称を用いているものについては略称しても良いことにして差支えない。ただし略称しないに越したことはない。(例外は少ない方が良い。)
例えば vector を v とすることは良くある。2次元の vector2 であれば v2、3次元の vector3 であれば v3 である。vector が構造体やクラス名を表すものであれば、それを v や vec と略称にすることは問題を発生する。
連想配列系
明らかに LookupTable として機能している以外の連想配列、Dictionary、Hashに関する名前は、Hash で統一する。Hash 以外の名前は、他の一部の言語やクラスライブラリでは使われていない。Hash であれば、それが持つ意味が共有される。