forked from dlang/dlang.org
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdstyle.dd
231 lines (181 loc) · 6.5 KB
/
dstyle.dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
Ddoc
$(D_S Dスタイル,
$(P
$(I Dスタイル) は、
Dでプログラムを書く上でのコーディングスタイルを集めたものです。
Dスタイルはコンパイラによって強制されるわけではなく純粋に見かけ上の話で、
プログラマ一人一人の選択の問題です。しかし、Dスタイルを守ることで、
あなたのコードを扱う他の人にとってわかりやすいプログラムになります。
もちろん他の人のコードをあなたが扱う時も。あなたがプロジェクトで
詳細なコーディングスタイルを定める際には、Dスタイルが叩き台となるでしょう。
)
$(P
Phobosへの提供コードや公式なDのソースコードはすべて、
以下のガイドラインに従います。
)
<h3>空白</h3>
$(UL
$(LI 1行に1文。)
$(LI タブではなく空白文字を使用する。)
$(LI インデントのレベル毎に、2つ以上の空白文字。)
$(LI 演算子とオペランドの間には空白を1つ。)
$(LI 関数定義どうしの間には空行2行。)
$(LI 関数定義のなかでは、
変数宣言と実行文の間に1つの空行。)
)
<h3>コメント</h3>
$(UL
$(LI 一行で注釈を付け加えるときは // を:
-------------------------------
statement; // comment
statement; // comment
-------------------------------
)
$(LI 複数行の注釈には /* */
でブロックコメントを:
-------------------------------
/* comment
* comment
*/
statement;
statement;
-------------------------------
)
$(LI 試しに書いた、文法的には正しいコードを $(SINGLEQUOTE コメントアウト) するには
$(CODE version (none)) を:
-------------------------------
version (none)
{
/* comment
* comment
*/
statement;
statement;
}
-------------------------------
$(CODE version(all)) とすることで再度有効化できます。
-------------------------------
version (all)
{
/* comment
* comment
*/
statement;
statement;
}
-------------------------------
)
$(LI 文法的に正しくないコードの $(SINGLEQUOTE コメントアウト) にはネストできる/+ +/コメントを使います:
-------------------------------
/+++++
/* comment
* comment
*/
{ statement;
statement;
+++++/
-------------------------------
)
)
<h3>命名規約</h3>
$(DL
$(DT 一般に)
<dd>複数の単語を繋いでできた名前の場合は、
先頭の単語を除いて全て、最初の一文字を大文字にします。
privateメンバ変数以外では、アンダースコア $(SINGLEQUOTE _) で始まる名前は使用しません。
-------------------------------
int myFunc();
-------------------------------
$(DT モジュール)
$(DD モジュール名とパッケージ名は全て小文字で。
[a..z] [0..p] [_] のみを使います。
大文字小文字を区別しないファイルシステムでの問題を避けることが出来ます。)
$(DT Cのモジュール)
$(DD Cの関数へのインターフェイスとなるモジュールは、"c" パッケージに入れます。
例えば:
-------------------------------
import std.c.stdio;
-------------------------------
モジュール名が全て小文字なのは同じです。
)
$(DT クラス, 構造体, 共用体, 列挙型, テンプレート の名前)
$(DD は、キャピタライズ(先頭を大文字に)します。
-------------------------------
class Foo;
class FooAndBar;
-------------------------------
)
$(DD 例外的なケースとして、型ではなく値を返すために作られたテンプレートについては、
概念的に関数に近いため、キャピタライズしません。
-------------------------
template GetSomeType(T) {}
template isSomeType(T) {}
-------------------------
)
$(DT 関数名)
$(DD 関数名はキャピタライズしません。
-------------------------------
int done();
int doneProcessing();
-------------------------------
)
$(V1
$(DT 定数名)
$(DD 全て大文字で。)
)
$(DT 列挙型のメンバ名)
$(DD lowerCamelCase で。)
)
<h3>意味のないエイリアス</h3>
$(P この手のものは:)
-------------------------------
alias void VOID;
alias int INT;
alias int* pint;
-------------------------------
$(P できるだけ避けましょう。)
<h3>宣言の書き方</h3>
$(P Dの宣言は左結合的なので、左寄せして書きます:)
-------------------------------
int[] x, y; // xとyが同じ型であることがわかりやすい
int** p, q; // pとqが同じ型であることがわかりやすい
-------------------------------
$(P こうすると変数どうしの関係が強調できます。C風の書き方は使わないこと:)
-------------------------------
int []x, y; // yもint[]型なので混乱する
int **p, q; // qもint**型なので混乱する
-------------------------------
<h3>演算子オーバーロード</h3>
$(P 算子オーバーロードは、
言語でサポートされる基本型を拡張するための強力な道具です。
しかしその強力さゆえに、読みにくいコードを作り出してしまう危険性をも秘めています。
Dの定義済み演算子は慣習にのっとった使い方をしています。
$(SINGLEQUOTE +) が $(SINGLEQUOTE 足し算) で $(SINGLEQUOTE <<)
が $(SINGLEQUOTE 左シフト)、などなど。
$(SINGLEQUOTE +) 演算子を $(SINGLEQUOTE 足し算) 以外の意味でオーバーロードするのは非常に混乱をまねくので、
避けるべきです。
)
<h3>ハンガリアン記法</h3>
$(P 変数の型を示すためにハンガリアン記法を使うのは、
悪い考えです。
しかし、変数の(型だけでは示されていないような)
使用目的を示すために使うのは、
多くの場合良い習慣といえるでしょう。)
<h3>ドキュメント</h3>
$(P
すべてのpublic宣言には、
$(LINK2 ddoc.html, Ddoc) 形式でコメントを添えます。
)
<h3>単体テスト</h3>
$(P
現実的な範囲で、
すべての関数は関数定義の直後にunittestブロックを置いて、
単体テストで検査します。
すべてのコードパスは最低一度はテストで実行されるようにします。
$(LINK2 code_coverage.html, コードカバレッジ解析) で検証できます。
)
)
Macros:
TITLE=Dスタイル
WIKI=DStyle
CATEGORY_APPENDICES=$0