Qt Coding Style/ja: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
'''日本語''' [[Qt_Coding_Style|English]] [[Qt_Coding_Style_Spanish|Spanish]] [[Qt_Coding_Style_SimplifiedChinese|简体中文]] [[Qt_Coding_Style_Russian|Русский]]
'''日本語''' [[Qt_Coding_Style|English]] [[Qt_Coding_Style_Spanish|Spanish]] [[Qt_Coding_Style_SimplifiedChinese|简体中文]] [[Qt_Coding_Style_Russian|Русский]]


[[Category:Developing_Qt::Guidelines]]<br />[[Category:Japanese]]<br />[toc align_right=&quot;yes&amp;quot; depth=&quot;2&amp;quot;]
[[Category:Developing_Qt::Guidelines]]
[[Category:Japanese]]
[toc align_right="yes" depth="2"]


= Qt コーディングスタイル =
= Qt コーディングスタイル =
Line 15: Line 17:


* 変数の宣言は 1 行に 1 つのみ
* 変数の宣言は 1 行に 1 つのみ
* 出来る限り短い変数名は避ける(&quot;a&amp;quot;, &quot;rbarr&amp;quot;, &quot;nughdeget&amp;quot; など)
* 出来る限り短い変数名は避ける("a", "rbarr", "nughdeget" など)
* 一文字の変数名は、カウンタや一時変数で使用目的が明白である場合に限り認められる
* 一文字の変数名は、カウンタや一時変数で使用目的が明白である場合に限り認められる
* 本当に必要になるまで変数の宣言はしない
* 本当に必要になるまで変数の宣言はしない


<code><br /> // 間違い<br /> int a, b;<br /> char *c, *d;
<code>
// 間違い
int a, b;
char *c, *d;


// 正しい<br /> int height;<br /> int width;<br /> char *nameOfThis;<br /> char '''nameOfThat;<br /></code>
// 正しい
<br />''' 変数名と関数名は小文字から始まり、名前の中の各単語は大文字から始まる<br />* 短縮形は避ける
int height;
int width;
char *nameOfThis;
char '''nameOfThat;
</code>


<code><br /> // 間違い<br /> short Cntr;<br /> char ITEM_DELIM = '';
''' 変数名と関数名は小文字から始まり、名前の中の各単語は大文字から始まる
* 短縮形は避ける


// 正しい<br /> short counter;<br /> char itemDelimiter = '';<br /></code>
<code>
// 間違い
short Cntr;
char ITEM_DELIM = '';
 
// 正しい
short counter;
char itemDelimiter = '';
</code>


* クラス名は常に大文字から始まる。パブリックなクラスは Q から始まる(QRgb)。パブリックな関数は大抵の場合 q で始まる(qRgb)。
* クラス名は常に大文字から始まる。パブリックなクラスは Q から始まる(QRgb)。パブリックな関数は大抵の場合 q で始まる(qRgb)。
Line 36: Line 54:
* キーワードの後と波括弧の前には空白を 1 つ入れる
* キーワードの後と波括弧の前には空白を 1 つ入れる


<code><br /> // 間違い<br /> if(foo){<br /> }
<code>
// 間違い
if(foo){
}


// 正しい<br /> if (foo) {<br /> }<br /></code>
// 正しい
if (foo) {
}
</code>


* ポインタや参照においては、型名と &amp;#42; または &amp; の間には空白を入れる。変数名と &amp;#42; または &amp; の間には空白は入れない。
* ポインタや参照においては、型名と &amp;#42; または &amp; の間には空白を入れる。変数名と &amp;#42; または &amp; の間には空白は入れない。


<code><br /> char '''x;<br /> const QString &amp;myString;<br /> const char''' const y = &quot;hello&amp;quot;;<br /></code>
<code>
char '''x;
const QString &amp;myString;
const char''' const y = "hello";
</code>


* ビット演算子の前後には空白をいれる
* ビット演算子の前後には空白をいれる
Line 48: Line 76:
* C スタイルのキャストは可能な限り避ける
* C スタイルのキャストは可能な限り避ける


<code><br /> // 間違い<br /> char* blockOfMemory = (char* ) malloc(data.size());
<code>
// 間違い
char* blockOfMemory = (char* ) malloc(data.size());


// 正しい<br /> char '''blockOfMemory = reinterpret_cast&amp;lt;char'''&gt;(malloc(data.size()));<br /></code>
// 正しい
char '''blockOfMemory = reinterpret_cast<char'''>(malloc(data.size()));
</code>


== 波括弧 ==
== 波括弧 ==
Line 56: Line 88:
* 基本的に、左波括弧はステートメントの開始行に置く
* 基本的に、左波括弧はステートメントの開始行に置く


<code><br /> // 間違い<br /> if (codec)<br /> {<br /> }
<code>
// 間違い
if (codec)
{
}


// 正しい<br /> if (codec) {<br /> }<br /></code>
// 正しい
if (codec) {
}
</code>


* 例外:関数の実装とクラスの宣言では左括弧は常に新しい行の初めに置く
* 例外:関数の実装とクラスの宣言では左括弧は常に新しい行の初めに置く


<code><br /> static void foo(int g)<br /> {<br /> qDebug(&quot;foo: %i&amp;quot;, g);<br /> }
<code>
static void foo(int g)
{
qDebug("foo: %i", g);
}


class Moo<br /> {<br /> };<br /></code>
class Moo
{
};
</code>


* 条件文では、内部の処理が 1 行を超える場合、または 1 行の処理が複雑な場合のみ、波括弧を使用する
* 条件文では、内部の処理が 1 行を超える場合、または 1 行の処理が複雑な場合のみ、波括弧を使用する


<code><br /> // 間違い<br /> if (address.isEmpty()) {<br /> return false;<br /> }
<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:条件式が複数にまたがる場合は波括弧を使用する
 
<code>
// 正しい
if (address.isEmpty() || !isValid()
|| !codec) {
return false;
}
</code>
 
* 例外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>
 
h2. 丸括弧
 
* 式をまとめる為に丸括弧を使用する
 
<code>
// 間違い
if (a &amp;&amp; b || c)
 
// 正しい
if ((a &amp;&amp; b) || c)


for (int i = 0; i &lt; 10; +''i) {<br /> qDebug(&quot;%i&amp;quot;, i);<br /> }
// 間違い
<br /> // 正しい<br /> if (address.isEmpty())<br /> return false;
a'' b &amp; c
<br /> for (int i = 0; i &lt; 10;i)<br /> qDebug(&quot;%i&amp;quot;, i);<br /></code>
<br />* 例外1:条件式が複数にまたがる場合は波括弧を使用する
<br /><code><br /> // 正しい<br /> if (address.isEmpty() || !isValid()<br /> || !codec) {<br /> return false;<br /> }<br /></code>
<br />* 例外2:if-else 式のいずれかの処理が複数行にまたがる場合、全てに波括弧を使用する
<br /><code><br /> // 間違い<br /> if (address.isEmpty())<br /> return false;<br /> else {<br /> qDebug(&quot;%s&amp;quot;, qPrintable(address));<br />it;<br /> }
<br /> // 正しい<br /> if (address.isEmpty()) {<br /> return false;<br /> } else {<br /> qDebug(&quot;%s&amp;quot;, qPrintable(address));<br />it;<br /> }
<br /> // 間違い<br /> if (a)<br /> if (b)<br /> …<br /> else<br /> …
<br /> // 正しい<br /> if (a) {<br /> if (b)<br /> …<br /> else<br /> …<br /> }<br /></code>
<br />* 条件文の内部が空の場合は波括弧を使用する
<br /><code><br /> // 間違い<br /> while (a);
<br /> // 正しい<br /> while (a) {}<br /></code>
<br />h2. 丸括弧
<br />* 式をまとめる為に丸括弧を使用する
<br /><code><br /> // 間違い<br /> if (a &amp;&amp; b || c)
<br /> // 正しい<br /> if ((a &amp;&amp; b) || c)
<br /> // 間違い<br /> a'' b &amp; c


// 正しい<br /> (a + b) &amp; c<br /></code>
// 正しい
(a + b) &amp; c
</code>


== switch 文 ==
== switch 文 ==
Line 96: Line 210:
* 全ての case は break (または return) で終了しなければならない。意図的に break しない場合はその旨をコメントで記述する。複数の case を続けて記述する場合は例外。
* 全ての case は break (または return) で終了しなければならない。意図的に break しない場合はその旨をコメントで記述する。複数の case を続けて記述する場合は例外。


<code><br /> switch (myEnum) {<br /> case Value1:<br /> doSomething();<br /> break;<br /> case Value2:<br /> case Value3:<br /> doSomethingElse();<br /> // fall through<br /> default:<br /> defaultHandling();<br /> break;<br /> }<br /></code>
<code>
switch (myEnum) {
case Value1:
doSomething();
break;
case Value2:
case Value3:
doSomethingElse();
// fall through
default:
defaultHandling();
break;
}
</code>


== 改行 ==
== 改行 ==
Line 103: Line 230:
* 複数行に分割する場合、カンマは行の最後に置き、演算子は行の最初に置く。エディタの幅が小さい場合、行の最後にある演算子は見逃しやすい。
* 複数行に分割する場合、カンマは行の最後に置き、演算子は行の最初に置く。エディタの幅が小さい場合、行の最後にある演算子は見逃しやすい。


<code><br /> // 正しい<br /> if (longExpression<br /> + otherLongExpression<br /> + otherOtherLongExpression) {<br /> }
<code>
// 正しい
if (longExpression
+ otherLongExpression
+ otherOtherLongExpression) {
}


// 間違い<br /> if (longExpression +<br /> otherLongExpression +<br /> otherOtherLongExpression) {<br /> }<br /></code>
// 間違い
if (longExpression +
otherLongExpression +
otherOtherLongExpression) {
}
</code>


== 継承と virtual キーワード ==
== 継承と virtual キーワード ==

Revision as of 09:33, 25 February 2015

日本語 English Spanish 简体中文 Русский [toc align_right="yes" depth="2"]

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) {
 }
  • ポインタや参照においては、型名と &#42; または & の間には空白を入れる。変数名と &#42; または & の間には空白は入れない。
 char '''x;
 const QString &amp;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) {}

h2. 丸括弧

  • 式をまとめる為に丸括弧を使用する
 // 間違い
 if (a &amp;&amp; b || c)

 // 正しい
 if ((a &amp;&amp; b) || c)

 // 間違い
 a'' b &amp; c

// 正しい
 (a + b) &amp; 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 キーワードを使用 しない こと

例外

  • コードの見栄えを良くするという理由に限り以上のルールを破っても良い