| Game Coding Complete 54 |
|---|
|
第3スマートなフーディングのためのヒとスタイル
複雑な演算を行うコードは明示的に記述する。 クラスを階層化するときは階層をでるだフットにする。 口承と包含の違いを意識する。 仮想関数の間違った使い方をしない。 ロインターフェイスクラスとファクトリを用いる。 オブジェクトの初期化には、コンストラクタに加えストリームも用いる。 .複雑な演算に隠れたコードをうことは避けよ コピーコンストラクタ、演算子オーバーロード、デストラクタはすて、ームプログラマなめる隠れたコード問題の「元」だ。特に、コードがあるとは思つてもみなかつたところにが潜んでいると、さまざまな問題を引き起こす。最もよい例がデストラクた。なぜならデストラタは明示的に呼び出すものではなく、あるオブジェクトのために確保したメモリを解放するときそのオジェクトがスコープから外れたときに自動的に呼び出されるものたからた。デストラクをリモートコンピュータにアタッチし、数MBのMP3ファイルをダウンロードするといったバたことをしようものなら、チームメイトに引っ張り出されて八つ裂きにされるだろう。 複雑な演算を行うコピーコンストラクタや演算子オーバーロードは使わないようにすることをおめする。単純に見えるものは単純でなければならず、人をだますようなものであってはない。例えば、ほとんどのプログラマは、単純な等号や乗算記号を含むコードを見たら、まさかィラー級数のような複雑な式になるとは思わないだろう。そうしたフードで覆われたコードは見た目のとおり簡単で、おそらくは簡単な代入か、floati 型やdoublen 型といった似たようなデータ型の算だと思うだろう。 ゲームプログラマはエレガントな技術が大好きだ。そうしたエレガンスを好む気持ちが、コーコンストラクタやオーバーロードされた演算子などのC++構成物の中で複雑なアルゴリズム計算を使うといった行動に彼らを駆り立てるのだ。高レベルのコードは数行だけで複雑な動作をするもの、そしてこれこそが正しい設計、というのが彼らの考え方の根底にある。しかし、こうたとを真に受けてはならない。 肉付けされた演算は明示的に呼び出すべきである。C++構成物を使ってコードをすっきり見いというプログラマはこの言葉に抵抗を感じるかもしれない。これにはもちろん例外もあるば、44の行列クラスのように比較的演算コストの高い演算ではコードの明瞭さが重要になめ、オーバーロードされた演算子を使うのがよい。 ときとして、コピーコンストラクタと代入演算子をprivate に指定したいときがあるかもしれなこうすることで、そのオブジェクトをそのシステムの中でコピーできなすのこれにはB0ononcopyable クラスを用いればよい。このクラスから派生クラスを作れどのクラスは保れる。このよい例として挙げられるのが、容量が何MBもある音響トラッのるな。リソースュ内のオジェクト。こういったものは、不注意なプログラマが小きなサウンドパッログラが小ュ、e 54 |