2. "Implementing QuantLib"の和訳
Appendix B Code Conventions プログラムコードの表記方法の慣行
どんなプログラマーの集団においても、いくつかのコードを書く conventions(慣行) を持っています。どのような conventions であっても (6、 7 種類あり、数えきれない位の争いの原因になっています)、それに厳格に従う事が重要です。(注: 但し、QuantLibライブラリーの開発者も人間ですので、時々そのルールを守っていない事もあります) そうする事によって、プログラムコードの理解を容易にします。conventionsに馴染みのある読者であれば、一目見ただけでマクロと関数の違いが判りますし、変数と変数型の名前の違いも判ります。
下記の Listing B1 に QuantLibライブラリーの中で使われている conventions を簡単に示します。 Sutter and Alexandrescu ("C++ Coding Standards. Addison-Wesley, 2004") のアドバイスに従い、我々は、その数を最小限にし、読みやすさを向上させる conventions にのみ限定しようと努めました。
Listing B-1 : QuantLib code conventions.の概要
#define SOME_MACRO
typedef double SomeType;
class SomeClass {
public:
typedef Real* iterator;
typedef const Real* const_iterator;
};
class AnotherClass {
public:
void method();
Real anotherMethod(Real x, Real y) const;
Real member() const; // getter, no "get"
void setMember(Real); // setter
private:
Real member_;
Integer anotherMember_;
};
struct SomeStruct {
Real foo;
Integer bar;
};
Size someFunction(Real parameter, Real anotherParameter) {
Real localVariable = 0.0;
if (condition) {
localVariable += 3.14159;
} else {
localVariable -= 2.71828;
}
return 42;
}
マクロはすべて大文字で書かれ、単語の間を underscore(_) で分けています。データ型 (クラスや構造体など)の名前は、大文字でスタートし、いわゆるcamel体(複合語の場合は各単語の先頭を大文字にする)で書かれています。上記例ではSomeTypeのようなデータ型宣言や、SomeClassやAnotherClassといったクラス名がそうなっています。しかし、データ型宣言においては、C++の標準ライブラリーに見られるような方法を真似て、違う方法をとる場合もあります。その例として、SomeClassの中の、2つのiterator型の型宣言がそうなっています(訳注: 先頭文字も含めて、すべて小文字になっている)。同じような例外が、内部クラスについても存在しています。
その他の殆どは (変数、関数、メソッド名、パラメータなど)、小文字でスタートする camel体で書かれています。クラスのメンバー変数も同じ慣行に従っていますが、最後にunderscore ( _ ) を付け足しています。そうする事によって、メソッドの中で使われるローカル変数との区別が容易になります(構造体や構造値に近いクラスの publicなメンバー変数には例外がよく見られます)。メソッドの中で、gettersメソッド(メンバー変数を取りだすメソッド)と setters(メンバー変数を書き込むメソッド)の間で、さらに特別な使い分け方法があります。settersメソッドでは、設定しようとするメンバー変数名の前に set を付け加え最後の underscore を取り除いた単語をメソッド名とし、gettersメソッドでは取りだす変数名の最後の underscore を取り除いた単語をメソッド名としています (getは付け足しません)。この方法は、上記コードの AnotherClass や SomeStructの中で例が確認できます。
かなり緩やかな慣行として、関数宣言や if、 else、 for、 while、 do の後の左かっこ( はそれらの keyword と同じ行に書くようにしています(上記コードの someFunction( )がその例です)。さらに、else keyword は、その前に来る右かっこ ) と同じ行に書くようにしています。同じ方法は、while文の後に来る do 宣言でも取られています。しかし、この方式は、読みやすさの為と言うより、好みの問題と言えるので、開発者の方は、この方法が嫌であれば、自分流で書いても構わないでしょう。ここにのせている関数は、読みやすさを向上させる他の慣行例も載せています。それは、関数やメソッドの引数が、同じ行に書ききれない場合は、縦に並べて書くようにしています。
最後ですが大事なルールとして、コードの中で、tabを使わないようにしています。その代わり4文字分のスペースを使っています。もし、ここにある慣行の内、一つだけ従うとするなら、このルールにして下さい。そうしないと、大抵の場合、他のコードエディターを使っている開発者からすると、インデントが全くうまくいっていないコードに見えてしまうでしょう。読者の方がどのようなコードエディターを使っていても、4文字スペースの方法であればうまく調整されて、読者自身が手間をかけなくともきちんと適用されているはずです。
<ライセンス表示>
QuantLibのソースコードを使う場合は、ライセンス表示とDisclaimerの表示が義務付けられているので、添付します。 ライセンス