1. 仕様の紹介
この仕様書は主に、Delphi のソースプログラムを作成する際に守るべき規則や注意事項を規定しています。この仕様を作成する目的は、会社のソフトウェア開発者のソース コード作成習慣を一貫させることです。これにより、各チーム メンバーが他のチーム メンバーのコードを理解できるようになり、ソース コードの二次開発記憶システムのメンテナンスが容易になります。
2. 一般的なフォーマット仕様
2.1 インデント
インデントは、ソース プログラムのレベルが変更されたときに可読性を高めるために公開される 2 つのスペースです。インデント規則は 1 レベルあたり 2 つのスペースです。タブは使用できません。ユーザーが行った設定の違いにより、タブは異なる効果を生み出すためです。開始または開始判定、ループ、例外処理、with 文、レコード型宣言、クラス宣言などに遭遇した場合、終了または終了判定、ループ、例外処理、with 文、レコード型宣言、クラス宣言に遭遇した場合は 1 レベルずつ上がります。待機中は宣言が1段階下がります。例えば:
TmpInt <> 100 の場合
TmpInt := 100;
2.2 開始...終了
begin ステートメントと end ステートメントは、ソース プログラム内で 1 行を占める必要があります。次に例を示します。
for I := 0 to 10 do begin //間違った使用法
終わり;
for I := 0 to 10 do //正しい使い方
始める
終わり;
2.3スペース
I := I + 1;、a、b などの演算子や論理判定記号の両端にはスペースを入れますが、括弧を付ける場合はスペースは不要です。例: if ( a > b ) then //間違った使用法
If (a > b) then //正しい使い方
別の例: PROcedure Test(Param1: integer; Param3: string);
3. Object Pascal構文記述形式仕様
3.1 予約語
Object Pascal 言語の予約語またはキーワードはすべて小文字で記述する必要があります。
3.2 手順と機能
3.2.1 命名と形式
プロシージャ名と関数名はすべて意味のある単語で構成され、すべての単語の最初の文字は大文字にする必要があります。例えば:
プロシージャ formatharddisk;// 名前が間違っています
プロシージャ FormatHardDisk;// 正しい名前付け
変数の内容を設定するプロシージャと関数には、先頭に Set を付ける必要があります。次に例を示します。
プロシージャ SetUserName;
変数の内容を読み取るプロシージャと関数では、接頭辞として Get を使用する必要があります。次に例を示します。
関数 GetUserName: 文字列;
3.2.2 プロシージャと関数のパラメータ
3.2.2.1 命名
同じ型のパラメータは同じ文に記述されます。
プロシージャ Foo(Param1, Param2, Param3: 整数; Param4: 文字列);
3.2.2.2 命名
すべてのパラメータは意味のあるものである必要があり、パラメータ名が他の属性の名前と同じ場合は、次のように接頭辞「A」を追加します。
プロシージャ SomeProc(AUserName: 文字列; AUserAge: 整数);
3.2.2.3 名前の競合
使用する 2 つのユニットに同名の関数または手続きが含まれている場合、その関数または手続きを参照すると、use 句で後から宣言されたユニット内の関数または手続きが実行されます。この「uses-clause-dependent」を回避するには、関数またはプロシージャを参照するときにその完全なソースを記述する必要があります。例えば:
SysUtils.FindClose(SR);
Windows.FindClose(ハンドル);
3.3 変数
3.3.1 変数の名前と形式
まず、他のチーム メンバーが変数の意味を簡単に理解できるように、すべての変数に意味のある名前を付ける必要があります。変数の名前には同義の英語名を使用できますが、各単語の最初の文字は大文字にする必要があります。例えば:
変数
WriteFormat::string;
同時に、次のように、特定のタイプに対して特定の略語を使用することができます。
ポインタ型
P
レコードタイプ
録音
配列型
到着
親切
クラス
ループ制御変数は通常、i、j、k などの 1 つの文字を使用します。 UserIndex などの意味のある名前を使用することもできます。
3.3.2 ローカル変数
プロシージャ内でローカル変数を使用する場合は、他のすべての変数の命名規則に従います。
3.3.3 グローバル変数
グローバル変数を使用する必要がある場合は、接頭辞「g」を追加し、変数の型を変数名に反映する必要があります。例えば:
gprecUserCount: point;//UserCount という名前のグローバル変数、その型は構造体へのポインタです
ただし、グローバル変数はモジュール内で使用できます。モジュール内のすべてのグローバル変数には、接頭辞「F」を付ける必要があります。複数のモジュール間でデータを交換する必要がある場合は、属性を宣言することでこれを実現する必要があります。例えば:
タイプ
TFormOverdraftReturn = クラス(TForm)
プライベート
{プライベート宣言}
フューザー名: 文字列;
FuserCount: 整数。
プロシージャ SetUserName(値: 文字列);
関数 GetUserName: 文字列;
公共
{公的宣言}
property UserName: 文字列 読み取り GetUserName 書き込み SetUserName;
property UserCount: 整数読み取り FuserCount 書き込み FuserCount;
終わり;
3.4 タイプ
3.4.1 症例プロトコル
予約語の型名はすべて小文字にする必要があります。 Win32 API タイプは通常、すべて大文字で、他のタイプでは最初の文字が大文字になり、残りの文字が小文字になります。
変数
MyString: 文字列; // 予約語
WindowHandle: HWND; // Win32 API タイプ
I: 整数; // システムユニットに導入された型識別子
3.4.2 浮動小数点型
Real 型は使用しないでください。古い Pascal コードとの互換性を保つためです。Double 型を使用してください。 Double 型はプロセッサとデータ バス用に最適化されており、IEEE によって定義された標準データ構造です。 Double の範囲を超える場合は Extended を使用してください。ただし、Extended は Java ではサポートされていません。ただし、他の言語で記述された DLL を使用する場合は、Single タイプが使用される場合があります。
3.4.3 列挙型
列挙型の名前は意味のあるものでなければならず、型名の先頭に「T」を付ける必要があります。列挙型のコンテンツの名前には、列挙型名の省略形が含まれている必要があります。次に例を示します。
TSongType = (stRock、stClassical、st Country、stAlternative、stHeavyMetal、stRB);
3.4.4 配列の型
配列型の名前は意味のあるものでなければならず、型名の先頭に「T」を付ける必要があります。配列型へのポインターを宣言する場合は、型の名前の前に「P」を付ける必要があります。次に例を示します。
タイプ
PCycleArray = ^TCycleArray;
TCycleArray = 整数の配列[1..100];
3.4.5 レコードの種類
レコード タイプの名前は意味のあるものでなければならず、タイプ名の先頭に「T」を付ける必要があります。配列型へのポインターを宣言する場合は、型の名前の前に「P」を付ける必要があります。次に例を示します。
タイプ
P従業員 = ^T従業員;
T従業員=レコード
従業員名: 文字列
従業員率: 2 倍。
終わり;
カテゴリー3.5
3.5.1 命名と形式
クラス名は意味のあるものでなければならず、型名には接頭辞「T」を付ける必要があります。例えば:
タイプ
TCustomer = クラス(TObject)
クラス インスタンスの名前は通常、クラス名から「T」を除いたものになります。例えば:
変数
顧客: T顧客;
3.5.2 クラス内の変数
3.5.2.1 命名と形式
クラス名は意味のあるものでなければならず、型名には接頭辞「F」を付ける必要があります。すべての変数は 4 次元でなければなりません。外部からこの変数にアクセスする必要がある場合は、属性を宣言する必要があります
3.5.3 方法
3.5.3.1 命名と形式
関数とプロシージャの名前と形式は同じです。
3.5.3.2 プロパティのアクセス方法
すべてのプロパティ アクセス メソッドは、private または protected で表示される必要があります。属性アクセス メソッドの名前は、関数やプロシージャの名前と同じです。また、リーダー メソッドは接頭辞 'Get' を使用する必要があり、書き込みメソッドは接頭辞 'Set' を使用する必要があります。 write メソッドのパラメータの名前は「Value」である必要があり、その型は書き込まれるプロパティと一致している必要があります。例えば:
TSomeClass = クラス(TObject)
プライベート
fsomeField: 整数;
保護された
関数 GetSomeField: 整数;
プロシージャ SetSomeField( 値: 整数);
公共
property SomeField: 整数 読み取り GetSomeField 書き込み SetSomeField;
終わり;
3.6 プロパティ
3.6.1 命名と形式
操作に使用される、接頭辞「F」が付いたクラス変数の名前と一致します。
3.7 ドキュメント
3.7.1 プロジェクトファイル
3.7.1.1 プロジェクトのディレクトリ構造
プログラムのホーム ディレクトリ -- Bin (アプリケーションが配置されているパス)
-Db (ローカルデータベースへのパス)
-Doc (ドキュメントが配置されているパス)
-Hlp (ヘルプ ファイルへのパス)
・バックアップ(バックアップパス)
-Tmp (一時ファイルのパス)
3.7.1.2 命名
プロジェクト ファイルには意味のある名前を付ける必要があります。例: Delphi のシステム情報のプロジェクト ファイルの名前は SysInfo.dpr です。
3.7.2 フォームファイル
3.7.2.1 命名
フォームの名前と一致する: たとえば、フォームの名前が FormMain の場合、フォーム ファイルの名前は FormMain.frm になります。
3.7.3 データモジュールファイル
3.7.3.1 命名
データ モジュール ファイルには意味のある名前を付け、接頭辞「DM」を付ける必要があります。例: ユーザー データ モジュールの名前は「DMCustomers.dfm」です。
3.7.4 リモート データ モジュール ファイル
3.7.4.1 命名
リモート データ モジュール ファイルには意味のある名前を付け、プレフィックスとして「RDM」を使用する必要があります。例: ユーザーのリモート データ モジュールの名前は「RDMCustomers.dfm」です。
3.7.5 ユニットファイル
3.7.5.1 通常単位
3.7.5.1.1 ユニットファイルの命名
ユニット ファイルには意味のある名前を付け、プレフィックスとして「unit」を使用する必要があります。例: 一般ユニットの名前は「UnitGeneral」です。
3.7.5.2 フォームユニット
3.7.5.2.1 命名
フォーム ユニット ファイルの名前は、フォームの名前と一致している必要があります。たとえば、メイン フォームの名前が FormMain.pas の場合、フォーム ユニット ファイルの名前は UnitFormMain になります。
3.7.5.3 データモジュールユニット
3.7.5.3.1 命名
データ モジュール ユニット ファイルの名前は、データ モジュールの名前と一致している必要があります。たとえば、メイン データ モジュールの名前が DMMain.pas の場合、データ モジュール ユニット ファイルの名前は UnitDMMain になります。
3.7.5.4 ファイルヘッダー
すべてのファイルの先頭には、ファイルの目的、作成者、日付、入出力を記述します。例えば:
{
変更日:
著者:
使用:
このモジュールの構造は次のもので構成されます。
}
3.7.6 フォームとデータモジュールのフォーム
3.7.6.1 フォームクラス
1. フォームクラスの命名基準
フォーム クラスには意味のある名前を付け、「TForm」という接頭辞を付ける必要があります。例: About Form クラスの名前は次のとおりです。
TAboutForm = クラス(TForm)
メインフォームの名前は
TMainForm = クラス(TForm)
2. Formクラスインスタンスの命名基準
Form クラスのインスタンスの名前は、Form クラスの名前から「T」を除いた名前と一致している必要があります。例えば:
型名
インスタンス名
フォームについて
フォームについて
Tメインフォーム
メインフォーム
T顧客エントリーフォーム
顧客入力フォーム
3.7.6.2 データモジュールフォーム
3.7.6.2.1. データモジュールフォームの命名基準
データ モジュール フォーム クラスは意味のある名前を付け、接頭辞として「TDM」を使用する必要があります。例えば:
TDMCustomer = クラス(TDataModule)
TDMOrders = クラス(TDataModule)
3.7.6.2.2. データモジュールインスタンスの命名基準
データ モジュール フォーム クラス インスタンスの名前は、「T」を省略したデータ モジュール フォーム クラスの名前と一致している必要があります。例えば:
型名
インスタンス名
TCustomerDataModule
顧客データモジュール
注文データモジュール
注文データモジュール
3.8 コントロール
3.8.1 コントロールインスタンスの命名
コントロールのインスタンスには、コントロール クラスの名前から「T」を除いた名前をプレフィックスとして付ける必要があります。次に例を示します。
ユーザー名が入力される Tedit の名前は、EditUserName です。
3.8.2 コントロールの略称
コントロールの名前には次の略語を使用できますが、使用される略語はコントロール名の間に「_」が追加されます。
3.8.2.1 標準タブ
mm Tメインメニュー
午後 Tポップアップメニュー
mmiTMainMenuItem
pmiTPopupMenuItem
lblTラベル
編集T編集
mem Tメモ
btn Tボタン
cb Tチェックボックス
rb Tラジオボタン
lb Tリストボックス
cb Tコンボボックス
scbTScrollBar
gb TGroupBox
rg TRadioGroup
パネルパネル
cl TCommandList
3.8.2.2 追加のタブ
bbtn TBitBtn
sbTSpeedButton
私 TMask編集
sg TStringGrid
dgTDrawGrid
imgT画像
shp Tシェイプ
ブル
sbxTScrollBox
clb TCheckListbox
spl TSプリッター
stx TStaticText
cht Tチャート
3.8.2.3 Win32 タブ
tbcTTabコントロール
pgcTPageControl
ilTImageList
TRichEdit について
tbr TTrackBar
prb TProgressBar
ud アップダウン
香港THotKey
アニTAnimate
dtpTDateTimePicker
テレビTツリービュー
lv TListView
hdrTHeaderControl
stb Tステータスバー
tlb Tツールバー
clbTクールバー
3.8.2.4 「システム」タブ
tm Tタイマー
pb Tペイントボックス
mpTMediaPlayer
olec TOleContainer
ddccTDDEClientConv
ddciTDDEClientItem
ddscTDDEServerConv
ddsiTDDEServerItem
3.8.2.5 「インターネット」タブ
cskTClientソケット
sskTサーバーソケット
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
NEC TNMEcho
nf TNMFinger
nftpTNMFtp
nhttpTNMHttp
nMsg TNMMsg
nmsgTNMMSGServ
nntp TNMNNTP
npop TNMPop3
nuup TNMUUPプロセッサ
smtpTNMSMTP
nst TNMStrm
nsts TNMStrmServ
ntm TNM時間
nudpTNMUdp
psk Tパワーソック
ngs TNMGeneralServer
htmlTHtml
URLTNMUrl
smlTSimpleMail
3.8.2.6 データアクセスタブ
dsTデータソース
tbl TTテーブル
qry TQuery
spTStoredProc
dbTデータベース
ssn ツェッション
bmTBatchMove
usql TUpdateSQL
3.8.2.7 「データコントロール」タブ
dbgTDBGrid
dbn TDBナビゲーター
dbtTDBテキスト
dbeTDB編集
dbm TDBメモ
dbiTDB画像
dblb TDBリストボックス
dbcb TDBコンボボックス
dbch TDBチェックボックス
dbrg TDBRadioGroup
dbll TDBLookupListBox
dblc TDBLookupコンボボックス
dbreTDBRich編集
dbcgTDBCtrlグリッド
dbchTDDBチャート
3.8.2.8 デシジョンキューブタブ
dcb TDecisionCube
dcq TDecisionQuery
dcs TDecisionSource
dcp TDecisionPivot
DCG TDecisionGrid
dcgr TDecisionGraph
3.8.2.9 「Qレポート」タブ
qrTクイックレポート
qrsd TQRSubDetail
qrb TQRバンド
qrcb TQRチャイルドバンド
qrg TQRグループ
qrl TQRラベル
qrtTQRテキスト
qre TQRExpr
qrs TQRSysData
qrm TQRメモ
qrrt TQRichText
qrdr TQRDBRichText
qrsh TQRシェイプ
qri TQR画像
qrdi TQRDBM画像
qrcr TQRCompositeReport
qrp TQRPレビュー
qrch TQRチャート
3.8.2.10 「ダイアログ」タブ
OpenDialog TOpenDialog
保存ダイアログ TSaveダイアログ
OpenPictureDialog TOpenPictureDialog
ピクチャの保存ダイアログ TSピクチャの保存ダイアログ
フォントダイアログ TFontDialog
カラーダイアログ TColorDialog
プリントダイアログ TPrintDialog
プリンターセットアップダイアログ TPrintSetupダイアログ
FindDialog TFindDialog
置換ダイアログ TReplaceダイアログ
3.8.2.11 [Win31] タブ
dbll TDBLookupList
dblc TDBLookupコンボ
tsTTabSet
ol T概要
tnb TTabbedNoteBook
nb Tノートブック
hdrTヘッダー
flbTFileListBox
dlb Tディレクトリリストボックス
dcb TDriveComboBox
fcb TFilterComboBox
3.8.2.12 「サンプル」タブ
gg Tゲージ
cg TColorGrid
spb TSpinButton
スペツスピン編集
ドルTディレクトリアウトライン
calTカレンダー
ibea TIBEventAlerter
3.8.2.13 [ActiveX]タブ
cfx TチャートFX
vspTVSSell
f1bTF1本
vtc TVTチャート
grp Tグラフ
3.8.2.14 「ミダス」タブ
prvTプロバイダー
cdsTClientDataSet
qcds TQueryClientDataSet
dcomTDCOM接続
OleeTOleEnterpriseConnection
sckTSocketConnection
rms TRemoteServer
ミッド・ティミダス接続
4.仕様変更
この規則の規定は、構成管理に含まれているプログラムにのみ適用されます。この種の変更では、変更前のコンテンツを保持し、変更されたコンテンツと新しいコンテンツを識別する必要があります。そして、ファイルヘッダーに修飾子、変更日、変更内容などの必要な情報を追加します。
4.1 履歴レコードの変更
ソース ファイルに承認済みの変更を加える場合、変更者はプログラム ファイルのヘッダーに変更履歴項目を追加する必要があります。後続の変更ごとに、変更者は項目に次の情報を入力する必要があります。
修飾子
修正時間
変更理由
修正手順は修正方法です
4.2 新しいコード行を追加する
コードの新しい行の前後にはコメント行を置く必要があります。
// 修飾子、変更時刻、変更の説明
新しいコード行を追加
// 変更の終了
4.3 コード行の削除
コード行を削除する前後にコメント行を使用します。
//修飾子、修飾時刻、修飾の説明
//削除するコード行(削除するステートメントをコメント化します)
//変更終了
4.4 コード行の変更
コード行を削除してから新しいコード行を追加して、コード行を変更します。
//修飾子、修飾時刻、修飾の説明
//変更前のコード行
//変更の終了
// 変更されたコード行
変更されたコード行
//変更終了