Qt Coding Style/ja: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
(→変数の宣言: Change the tag referring to the English version) |
||
(8 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Cleanup | reason=Auto-imported from ExpressionEngine.}} | |||
=Qt コーディングスタイル= | '''日本語''' [[Qt_Coding_Style|English]] [[Qt_Coding_Style_Spanish|Spanish]] [[Qt_Coding_Style_SimplifiedChinese|简体中文]] [[Qt_Coding_Style_Russian|Русский]] | ||
[[Category:Developing_Qt::Guidelines]] | |||
[[Category:Japanese]] | |||
= Qt コーディングスタイル = | |||
これは Qt のコードを書く際に私たちが使用しているコーディング規約の概要です。ここにある情報は Qt のソースやフォーラム・メーリングリスト上の議論、開発者同士のコラボレーションに基づいています。 | これは Qt のコードを書く際に私たちが使用しているコーディング規約の概要です。ここにある情報は Qt のソースやフォーラム・メーリングリスト上の議論、開発者同士のコラボレーションに基づいています。 | ||
==インデント== | == インデント == | ||
* インデントは 4 つの空白である | * インデントは 4 つの空白である | ||
* タブではなく空白を使用する | * タブではなく空白を使用する | ||
==変数の宣言== | == 変数の宣言 == | ||
* 変数の宣言は 1 行に 1 つのみ | * 変数の宣言は 1 行に 1 つのみ | ||
* 出来る限り短い変数名は避ける( | * 出来る限り短い変数名は避ける("a", "rbarr", "nughdeget" など) | ||
* 一文字の変数名は、カウンタや一時変数で使用目的が明白である場合に限り認められる | * 一文字の変数名は、カウンタや一時変数で使用目的が明白である場合に限り認められる | ||
* 本当に必要になるまで変数の宣言はしない | * 本当に必要になるまで変数の宣言はしない | ||
* 変数名と関数名は小文字から始まり、名前の中の各単語は大文字から始まる | <pre> | ||
// 間違い | |||
int a, b; | |||
char *c, *d; | |||
// 正しい | |||
int height; | |||
int width; | |||
char *nameOfThis; | |||
char '''nameOfThat; | |||
</pre> | |||
''' 変数名と関数名は小文字から始まり、名前の中の各単語は大文字から始まる | |||
* 短縮形は避ける | * 短縮形は避ける | ||
<pre> | |||
// 間違い | |||
short Cntr; | |||
char ITEM_DELIM = ''; | |||
// 正しい | |||
short counter; | |||
char itemDelimiter = ''; | |||
</pre> | |||
* クラス名は常に大文字から始まる。パブリックなクラスは Q から始まる(QRgb)。パブリックな関数は大抵の場合 q で始まる(qRgb)。 | * クラス名は常に大文字から始まる。パブリックなクラスは Q から始まる(QRgb)。パブリックな関数は大抵の場合 q で始まる(qRgb)。 | ||
==空白== | == 空白 == | ||
* 処理を適切にまとめるために空白行を使う | * 処理を適切にまとめるために空白行を使う | ||
Line 28: | Line 55: | ||
* キーワードの後と波括弧の前には空白を 1 つ入れる | * キーワードの後と波括弧の前には空白を 1 つ入れる | ||
* ポインタや参照においては、型名と * または & | <code> | ||
// 間違い | |||
if(foo){ | |||
} | |||
// 正しい | |||
if (foo) { | |||
} | |||
</code> | |||
* ポインタや参照においては、型名と * または & の間には空白を入れる。変数名と * または & の間には空白は入れない。 | |||
<code> | |||
char '''x; | |||
const QString &myString; | |||
const char''' const y = "hello"; | |||
</code> | |||
* ビット演算子の前後には空白をいれる | * ビット演算子の前後には空白をいれる | ||
Line 34: | Line 77: | ||
* C スタイルのキャストは可能な限り避ける | * C スタイルのキャストは可能な限り避ける | ||
==波括弧== | <code> | ||
// 間違い | |||
char* blockOfMemory = (char* ) malloc(data.size()); | |||
// 正しい | |||
char '''blockOfMemory = reinterpret_cast<char'''>(malloc(data.size())); | |||
</code> | |||
== 波括弧 == | |||
* 基本的に、左波括弧はステートメントの開始行に置く | * 基本的に、左波括弧はステートメントの開始行に置く | ||
<code> | |||
// 間違い | |||
if (codec) | |||
{ | |||
} | |||
// 正しい | |||
if (codec) { | |||
} | |||
</code> | |||
* 例外:関数の実装とクラスの宣言では左括弧は常に新しい行の初めに置く | * 例外:関数の実装とクラスの宣言では左括弧は常に新しい行の初めに置く | ||
<code> | |||
static void foo(int g) | |||
{ | |||
qDebug("foo: %i", g); | |||
} | |||
class Moo | |||
{ | |||
}; | |||
</code> | |||
* 条件文では、内部の処理が 1 行を超える場合、または 1 行の処理が複雑な場合のみ、波括弧を使用する | * 条件文では、内部の処理が 1 行を超える場合、または 1 行の処理が複雑な場合のみ、波括弧を使用する | ||
<code> | |||
// 間違い | |||
if (address.isEmpty()) { | |||
return false; | |||
} | |||
for (int i = 0; i < 10; +''i) { | |||
qDebug("%i", i); | |||
} | |||
// 正しい | |||
if (address.isEmpty()) | |||
return false; | |||
for (int i = 0; i < 10;i) | |||
qDebug("%i", i); | |||
</code> | |||
* 例外1:条件式が複数にまたがる場合は波括弧を使用する | * 例外1:条件式が複数にまたがる場合は波括弧を使用する | ||
<code> | |||
// 正しい | |||
if (address.isEmpty() || !isValid() | |||
|| !codec) { | |||
return false; | |||
} | |||
</code> | |||
* 例外2:if-else 式のいずれかの処理が複数行にまたがる場合、全てに波括弧を使用する | * 例外2:if-else 式のいずれかの処理が複数行にまたがる場合、全てに波括弧を使用する | ||
<code> | |||
// 間違い | |||
if (address.isEmpty()) | |||
return false; | |||
else { | |||
qDebug("%s", qPrintable(address)); | |||
it; | |||
} | |||
// 正しい | |||
if (address.isEmpty()) { | |||
return false; | |||
} else { | |||
qDebug("%s", qPrintable(address)); | |||
it; | |||
} | |||
// 間違い | |||
if (a) | |||
if (b) | |||
… | |||
else | |||
… | |||
// 正しい | |||
if (a) { | |||
if (b) | |||
… | |||
else | |||
… | |||
} | |||
</code> | |||
* 条件文の内部が空の場合は波括弧を使用する | * 条件文の内部が空の場合は波括弧を使用する | ||
<code> | |||
// 間違い | |||
while (a); | |||
// 正しい | |||
while (a) {} | |||
</code> | |||
== 丸括弧 == | |||
* 式をまとめる為に丸括弧を使用する | * 式をまとめる為に丸括弧を使用する | ||
==switch 文== | <code> | ||
// 間違い | |||
if (a && b || c) | |||
// 正しい | |||
if ((a && b) || c) | |||
// 間違い | |||
a'' b & c | |||
// 正しい | |||
(a + b) & c | |||
</code> | |||
== switch 文 == | |||
* case は switch と同じインデントで記述する | * case は switch と同じインデントで記述する | ||
* 全ての case は break (または return) で終了しなければならない。意図的に break しない場合はその旨をコメントで記述する。複数の case を続けて記述する場合は例外。 | * 全ての case は break (または return) で終了しなければならない。意図的に break しない場合はその旨をコメントで記述する。複数の case を続けて記述する場合は例外。 | ||
==改行== | <code> | ||
switch (myEnum) { | |||
case Value1: | |||
doSomething(); | |||
break; | |||
case Value2: | |||
case Value3: | |||
doSomethingElse(); | |||
// fall through | |||
default: | |||
defaultHandling(); | |||
break; | |||
} | |||
</code> | |||
== 改行 == | |||
* 1 つの行は 100 文字以内に収める。必要であれば改行を挿入する。 | * 1 つの行は 100 文字以内に収める。必要であれば改行を挿入する。 | ||
* 複数行に分割する場合、カンマは行の最後に置き、演算子は行の最初に置く。エディタの幅が小さい場合、行の最後にある演算子は見逃しやすい。 | * 複数行に分割する場合、カンマは行の最後に置き、演算子は行の最初に置く。エディタの幅が小さい場合、行の最後にある演算子は見逃しやすい。 | ||
==継承と virtual キーワード== | <code> | ||
// 正しい | |||
if (longExpression | |||
+ otherLongExpression | |||
+ otherOtherLongExpression) { | |||
} | |||
// 間違い | |||
if (longExpression + | |||
otherLongExpression + | |||
otherOtherLongExpression) { | |||
} | |||
</code> | |||
== 継承と virtual キーワード == | |||
* virtual 関数を再実装する場合、ヘッダファイルに virtual キーワードを使用 '''しない''' こと | * virtual 関数を再実装する場合、ヘッダファイルに virtual キーワードを使用 '''しない''' こと | ||
==例外== | == 例外 == | ||
* コードの見栄えを良くするという理由に限り以上のルールを破っても良い | * コードの見栄えを良くするという理由に限り以上のルールを破っても良い | ||
Latest revision as of 06:39, 14 April 2021
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
日本語 English Spanish 简体中文 Русский
Qt コーディングスタイル
これは Qt のコードを書く際に私たちが使用しているコーディング規約の概要です。ここにある情報は Qt のソースやフォーラム・メーリングリスト上の議論、開発者同士のコラボレーションに基づいています。
インデント
- インデントは 4 つの空白である
- タブではなく空白を使用する
変数の宣言
- 変数の宣言は 1 行に 1 つのみ
- 出来る限り短い変数名は避ける("a", "rbarr", "nughdeget" など)
- 一文字の変数名は、カウンタや一時変数で使用目的が明白である場合に限り認められる
- 本当に必要になるまで変数の宣言はしない
// 間違い int a, b; char *c, *d; // 正しい int height; int width; char *nameOfThis; char '''nameOfThat;
変数名と関数名は小文字から始まり、名前の中の各単語は大文字から始まる
- 短縮形は避ける
// 間違い short Cntr; char ITEM_DELIM = ''; // 正しい short counter; char itemDelimiter = '';
- クラス名は常に大文字から始まる。パブリックなクラスは Q から始まる(QRgb)。パブリックな関数は大抵の場合 q で始まる(qRgb)。
空白
- 処理を適切にまとめるために空白行を使う
- 空白行を 1 行以上続けない
- キーワードの後と波括弧の前には空白を 1 つ入れる
// 間違い
if(foo){
}
// 正しい
if (foo) {
}
- ポインタや参照においては、型名と * または & の間には空白を入れる。変数名と * または & の間には空白は入れない。
char '''x;
const QString &myString;
const char''' const y = "hello";
- ビット演算子の前後には空白をいれる
- キャストの後には空白を入れない
- C スタイルのキャストは可能な限り避ける
// 間違い
char* blockOfMemory = (char* ) malloc(data.size());
// 正しい
char '''blockOfMemory = reinterpret_cast<char'''>(malloc(data.size()));
波括弧
- 基本的に、左波括弧はステートメントの開始行に置く
// 間違い
if (codec)
{
}
// 正しい
if (codec) {
}
- 例外:関数の実装とクラスの宣言では左括弧は常に新しい行の初めに置く
static void foo(int g)
{
qDebug("foo: %i", g);
}
class Moo
{
};
- 条件文では、内部の処理が 1 行を超える場合、または 1 行の処理が複雑な場合のみ、波括弧を使用する
// 間違い
if (address.isEmpty()) {
return false;
}
for (int i = 0; i < 10; +''i) {
qDebug("%i", i);
}
// 正しい
if (address.isEmpty())
return false;
for (int i = 0; i < 10;i)
qDebug("%i", i);
- 例外1:条件式が複数にまたがる場合は波括弧を使用する
// 正しい
if (address.isEmpty() || !isValid()
|| !codec) {
return false;
}
- 例外2:if-else 式のいずれかの処理が複数行にまたがる場合、全てに波括弧を使用する
// 間違い
if (address.isEmpty())
return false;
else {
qDebug("%s", qPrintable(address));
it;
}
// 正しい
if (address.isEmpty()) {
return false;
} else {
qDebug("%s", qPrintable(address));
it;
}
// 間違い
if (a)
if (b)
…
else
…
// 正しい
if (a) {
if (b)
…
else
…
}
- 条件文の内部が空の場合は波括弧を使用する
// 間違い
while (a);
// 正しい
while (a) {}
丸括弧
- 式をまとめる為に丸括弧を使用する
// 間違い
if (a && b || c)
// 正しい
if ((a && b) || c)
// 間違い
a'' b & c
// 正しい
(a + b) & c
switch 文
- case は switch と同じインデントで記述する
- 全ての case は break (または return) で終了しなければならない。意図的に break しない場合はその旨をコメントで記述する。複数の case を続けて記述する場合は例外。
switch (myEnum) {
case Value1:
doSomething();
break;
case Value2:
case Value3:
doSomethingElse();
// fall through
default:
defaultHandling();
break;
}
改行
- 1 つの行は 100 文字以内に収める。必要であれば改行を挿入する。
- 複数行に分割する場合、カンマは行の最後に置き、演算子は行の最初に置く。エディタの幅が小さい場合、行の最後にある演算子は見逃しやすい。
// 正しい
if (longExpression
+ otherLongExpression
+ otherOtherLongExpression) {
}
// 間違い
if (longExpression +
otherLongExpression +
otherOtherLongExpression) {
}
継承と virtual キーワード
- virtual 関数を再実装する場合、ヘッダファイルに virtual キーワードを使用 しない こと
例外
- コードの見栄えを良くするという理由に限り以上のルールを破っても良い