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の表示が義務付けられているので、添付します。   ライセンス

目次

Page Top に戻る

// // //