idソフトウェアプログラミング仕様

4416 ワード

先日、文章コードの美しさを見ました.Doom 3ソースコードの鑑賞で、idTech 4エンジンのコード基準が言及されています.見てみるととてもいいと思いますが、残念ながら全英語です.ここでは便利に見えるために、中国語に翻訳します.訳文は次のとおりです.
汎用仕様
        スペースキーの代わりに4つのスペースに相当するtabキーを使用します.
        (if,else,関数,構造体,typedefs,クラス定義など)で{}:
if ( x ) {
}
        Else文の開始はif文の右かっこと同じ行にあります.
if ( x ) {
} else {
}
       かっこを含む式.かっこの左右をスペースで区切る.
 :
if ( x ) {
}
  :
if (x) {
}

 :
x = ( y * 0.5f );
  :
x = (y * 0.5f);
       浮動小数点値については、doubleの説明が表示されない限り、正確な浮動小数点で値を割り当てます.
 :
float f = 0.5f;
  :
float f = 0.5;

 :
float f = 1.0f;
  :
float f = 1.f;
        関数名は大文字で始まります.
void Function( void );
        複数の単語からなる関数名、各単語の頭文字を大文字にします.
void ThisFunctionDoesSomething( void );
        関数の説明の標準ヘッダ:
/*
====================
FunctionName

  Description
====================
*/
        変数名は小文字で始まります.
float x;
        複数の単語からなる変数で、最初の単語は小文字で始まり、後ろの単語は大文字で始まります.
float maxDistanceFromPlane;
        typedefカスタムタイプの場合、変数定義と同じ命名規則を使用しますが、接尾辞として「_t」を付けます.
typedef int fileHandle_t;
        structタイプ定義は、変数定義と同様の命名規則を使用しますが、接尾辞として「_t」を付けます.
struct renderEntity_t;
        Enumタイプ定義は、変数定義と同様の命名規則を使用しますが、接尾辞として「_t」を付けます.Enum構造の定数はすべて大文字で、複数の単語を含む場合は下線で分割します.
enum contact_t {
	CONTACT_NONE,
	CONTACT_EDGE,
	CONTACT_MODELVERTEX,
	CONTACT_TRMVERTEX
};
        再帰関数名に「-r」接尾辞を付ける:
void WalkBSP_r( int node );
        define定義はすべて大文字で、複数の単語を含む場合は下線で分割します.
#define SIDE_FRONT		0
        できるだけconstキーワードを多く使う:
 :
const int *p;			// pointer to const int
int * const p;			// const pointer to int
const int * const p;	        // const pointer to const int
   :
int const *p;
  
クラス定義仕様
        クラス記述の標準ヘッダ:
/*
===============================================================================

	Description

===============================================================================
*/
        クラス名はすべて「id」で始まり、後学の単語はすべて大文字で始まります.
class idVec3;
        クラス変数の命名は、共通仕様の変数の命名と同じ規則を使用します.
class idVec3 {
    float		x;
    float		y;
    float		z;
}
        クラスメソッド名の命名は、共通仕様の関数の命名と同じ規則を使用します.
class idVec3 {
    float		Length( void ) const;
}
        クラス変数とメソッドは、変数タイプと関数の戻り値タイプが最初の列にあり、変数名とメソッド名が2番目の列にあります.
class idVec3 {
    float		x;
    float		y;
    float		z;
    float		Length( void ) const;
    const float *	ToFloatPtr( void ) const;
}
        ポインタの*番号を最初の列に配置すると、プログラムの読み取りが容易になります.
        クラス変数とメソッドの書き込み順序は次のとおりです.
1.list of friend classes
2.public variables
3.public methods
4.protected variables
5.protected methods
6.private variables
7.private methods
は、publicインタフェースが最初から容易に発見されるようにする.
        クラスメソッドがクラスメンバー変数を変更しない場合は、必ず「const」メソッドにします.
        「const_cast」は使用しないでください.
        オブジェクトがステータスを変更しない限り、constオブジェクトに戻ります.
        ほとんどの場合、次のような関数の再ロードは避けられます.
 :
const idAnim *	GetAnimByIndex( int index ) const;
const idAnim *	GetAnimByName( const char *name ) const;
const idAnim *	GetRandomAnim( float randomDiversity ) const;
  :
const idAnim *	GetAnim( int index ) const;
const idAnim *	GetAnim( const char *name ) const;
const idAnim *	GetAnim( float randomDiversity ) const;
id Studioネーミング仕様
id<name>Dlg      // dialog class
id<name>Ctrl     // dialog control class
id<name>Frm      // frame window
id<name>View     // view window
id<name>         // any other class
ファイル命名仕様         各クラスは、いくつかの小さなクラスに分割された後により意味がある場合を除き、独立したソースファイルに配置する必要があります.
         ファイル名の「id」接頭辞を削除するのと同じです.
class idWinding;

files:
Winding.cpp
Winding.h
        1つのクラスが複数のファイルに分割されると、これらのファイルの名前はクラス名で「id」接頭辞を削除して始まり、下線に続いてサブセット名になります.
class idRenderWorld;

files:
RenderWorld_load.cpp
RenderWorld_demo.cpp
RenderWorld_portals.cpp