変数名や関数名、ファイル名等は基本的に全て小文字であり、単語毎にアンダーバーで区切る。ただし例外もある。詳細については以下にて説明する。
変数名の先頭に「m_」を付加する。(嫌う人も多いが、Roast+ではこのルールを用いている)
まずそもそもグローバル変数は使わないべきである。
現在Roast+内で使っている箇所もあるが、今後無くしていく方針である。
どうしても使用したければ、変数名の先頭に「g_」を付加する。
共通ルール(小文字、単語毎にアンダーバー区切り)に従う。
大文字、単語毎にアンダーバー区切りでなければならない。
ただし一部例外的に小文字を用いてよい場合もある。(後述)
共通ルール(小文字、単語毎にアンダーバー区切り)に従う。
特にファイル名に関しては、Windowsでは大文字小文字が区別されないため、注意しなければならない。(大文字小文字が違うだけの同ファイル名は絶対に作ってはならない)
Roast+の主役であるC++ヘッダファイル名では、拡張子は「.hpp」を用いる(Cでは使用出来ない事を明示する為、.hを用いてはならない)。それ以外は共通ルールに同じである。
Cでも使用可能なヘッダファイルであれば、「.h」を用いる事も出来る。ただし、そのヘッダファイルがincludeしている全ての子ヘッダファイルにおいてもCで使用可能である必要がある。(includeをしているだけでも、そのincludeしているファイルが.hppであればNG)
それをincludeしただけではヘッダファイルとして成り立たない、特殊なincludeのために使われるファイルは「.hpp」をつけてはならない。
基本的に拡張子はなしであるか、例えば.csvファイルであればそのままの拡張子を用いる。勝手に拡張子を創りだしてはならない。
ごめん。今勝手な拡張子作り出してる所あるんだよね。後で直しておくよ・・・。
STLとは拡張子無しファイルの扱いが異なるので注意すること。
基本的に(テストコードを除き)ソースファイルは無くしていく方針ではあるが、テストコードでは使用されるので説明すると、拡張子には「.cpp」を用いる。
これも無くしていく方針ではあるし、テストコードでも使用されないが、一応説明しておくと、拡張子には「.c」を用いる。
単語は基本的に省略することなく記述すること。必要に応じて省略しても構わないが、省略する場合は一般的に理解される省略の仕方でなければならない。
正しい例)
間違った例)
また、略語とした結果、誤った解釈をされるような場合も避けるべきである。
局所的なローカルな変数の場合などでは、ある程度寛容であってもよい。
例えばループ変数にi,j,k等を使ってもよい。イテレータ変数としてitと言う名前も使って良い。
ただし、これらは関数内が非常に単純で、変数名に頼らずともコードを理解できるような場合に限られる。そうでない場合には省略せずに、正しく名前を用意するべきである。
インデントにはタブを用い、4タブとする。
特に明確なルールは設けていない。1行何文字かに拘るよりも、コードが見やすくなることにこだわるべきである。
一般的なコンソールでは横幅が80文字であるため、これを一つの目安とするべきである。これを死守する必要はないが、これを超える行が複数に渡る場合、一部の環境では見辛くなっている事を考慮しなければならない。
個人的には、インデントを含めて60文字程度を一つの目標としている。実際にはこれを越える事も多くある。ただ、この程度の文字数を目指すことにより、コードとしても余り詰め込みすぎになっていない見やすい1行となるし、80文字を越えることも少なくなる。自然と綺麗なコードが出来上がる。
ソースファイル上でマルチバイト文字は使ってはならない。他のOSや、他の国に持っていったときに文字化けになるだろうし、コンパイルすら通らないかも知れない。
また、そのまま上書きされたものをいざUpdateしてみたら文字化けするようになっていた・・・と泣きを見るのは自分自身である。
基本的にコメントも含め、英文とすべきである。なんちゃって英語でも構わない(現に私がそうである・・・)。
ローカルな言語をASCII文字の範囲内で記述したもの(ローマ字など)を用いても良いが、他の言語圏の人間には理解されないため極力使用しないべきである(なんちゃって英語の方がまだ理解される)。
# Excite翻訳とか、そんな程度のものでもいいよ。(ある程度補正はして欲しいけど・・・)
中括弧は基本的に改行して記述する。
例)
関数の内容がごくごく短い場合等には、状況に応じて改行しない事も許可される。
例)
if文の内容が1行しかない場合には、下手に中括弧を入れるよりも入れない方が見栄えが良い場合もあるとの判断の元に、省略することが許可される。
ただし、中括弧の省略は最も下位レベルのものに限定する事とする。中括弧を省略したif文の中で更にif文を書いたり、for文を書いたりしてはならない。
なお、for文の場合は中括弧を省略してはならない。for文はその特性上、中身が後々処理が書き足される事が多いため、1行でなくなる事が多いからである。
基本的にはクラスを用いるべきである。ただし以下の2つの場合には、構造体を用いる。
2つ目の定義は、主にC元来からの、データの受け渡しに使うような構造体である。
Roast+では更に、コンストラクタを記述し、メンバ変数を初期化してもよい。また、メソッドや、オペレータオーバーロード等を記述してもよい。PODな型でなくともよい。
ただしやはり、単なる「幾つかの値を一つの型としてまとめたもの」の範疇に留めるべきである。余りこの範疇を越えるようならば、クラスを用い、プロパティメソッドを用意することを検討した方がよい。
Roast+ではオペレータオーバーロードを積極的に活用している。
ただし、基本的にその演算子の意味に合わせて使用すべきであり、厳格な意味付け無しで乱用してはならない。
詳細は別途記述する。(未稿)
特に規制しない。と言うかむしろ積極的に活用している。
virtualなメソッドはその呼び出しにオーバーヘッドが発生する(基本的に。発生しないとしたらそれはvirtualメソッドである意味が無い、virtualメソッドとして活用していない、と言う事になる)ので、Roast+では出来る限り避けている。ただし無理に、テンプレート引数として派生クラスを指定させ、それを継承するようなテクニックを使う必要もない(なんでもかんでもこのテクニックを用いることは、かえって問題を生み出す)。もしその部分のオーバーヘッドが問題になるようであれば、きっと有識者が正しい形へと直してくれるはずなので、まずはそっとしておいた方がよい。