16

変数を 1 行で宣言するのが悪い習慣なのはなぜですか?

例えば

private String var1, var2, var3

それ以外の:

private String var1;
private String var2;
private String var3;
4

16 に答える 16

20

私の意見では、各変数を別々の行に配置する主な目的は、バージョン管理ツールの仕事を容易にすることです。

いくつかの変数が同じ行にある場合、異なる開発者による無関係な変更に対して競合が発生するリスクがあります。

于 2008-09-19T09:09:31.983 に答える
19

C++ の場合:

int * i, j;

i は int * 型、j は int 型です。区別はあまりにも簡単に見逃されます。

それぞれを 1 行にまとめることで、後でコメントを追加しやすくなります。

于 2008-09-19T09:13:15.313 に答える
10

さまざまな理由があると思いますが、突き詰めると、1 行で複数のことを行っているため、最初の行は読みにくく、失敗しやすいということです。

そして、それはすべて本当の利益ではありません.2行の節約されたスペースが本当の利益であることがわかります.

それはあなたが持っているときに起こることと似ています

if ((foo = some_function()) == 0) {
    //do something
}

もちろん、この例はあなたのものよりもはるかに悪いです。

于 2008-09-19T09:13:28.747 に答える
9

C / C ++では、ポインタ型を示すために使用される*が、直後の識別子にのみ適用されるという問題もあります。したがって、経験の浅い開発者のかなり一般的な間違いは、書くことです

int* var1, var2, var3;

3つの変数すべてが「intpointer」型であると想定しているのに対し、コンパイラーの場合、これは次のようになります。

int* var1;
int var2;
int var3;

var1のみをポインタにします。

于 2008-09-19T09:16:34.043 に答える
6

個別の行を使用すると、各行に変数の使用法を説明するコメントを追加できます (変数の名前から明確でない場合)。

于 2008-09-19T09:11:50.840 に答える
5

なぜそれは悪い習慣ですか?あなたのコードがまだ読める限り、そうは思わない。

//not much use
int i, j, k;

//better
int counter, 
    childCounter, 
    percentComplete;
于 2008-09-19T09:23:56.350 に答える
5

一部の言語では、例の var2 と var3 は文字列ではないため、バリアント (型なし) になります。

于 2008-09-19T09:06:59.417 に答える
4

正直言って、私はそれに反対していません。同じ行に同様の変数をグループ化することは完全に実行可能だと思います。

float fMin、fMax;

ただし、変数が無関係である場合は明確に操作します。

int iBalance、iColor;

于 2008-09-19T09:15:57.397 に答える
4

関連性。

2 つの変数が String 型であるからといって、それらが互いに密接に関連しているとは限りません。

2 つ (またはそれ以上) の変数が、変数の型ではなく関数によって密接に関連している場合は、それらを一緒に宣言することができます。つまり、プログラムの読者が 2 つの変数を一緒に見ることが理にかなっている場合にのみ、実際に一緒に配置する必要があります。

于 2008-09-19T10:00:14.437 に答える
3

これが私の理由です:

  • 読みやすさ、各行に 1 つしかないことがわかっていると見つけやすい
  • バージョン管理、行内変更の削減、単一行の追加、変更、または削除の増加、あるブランチから別のブランチへのマージが容易
于 2008-09-19T09:12:19.090 に答える
2

次のような場合はどうでしょうか。

public static final int NORTH = 0,
                        EAST = 1,
                        SOUTH = 2,
                        WEST = 3;

それも悪い習慣と見なされますか?以前に述べたいくつかのポイントに反するので、私はそれで大丈夫だと思います。

  • それらはすべて間違いなく同じタイプになります(静的に型付けされたJavaの世界では)
  • それぞれにコメントを追加できます
  • タイプを1つに変更する必要がある場合は、おそらくすべてに変更する必要があり、4つすべてを1回の変更で実行できます。

それで、(臭いコードではありますが)例では、それをしない理由はありますか?

于 2008-09-19T09:18:15.210 に答える
0
  1. バージョン管理ツール(Michelがカバー)を使用するときに、より明確になります
  2. 最も単純なオーバーフロー/アンダーフローまたはコンパイルエラーがあり、目が明白なものを指摘できなかったときに読みやすくするため
  3. 反対を守るために(つまり、多変数の単一行宣言)、長所が少なくなります(「コードテキストの垂直方向の可視性」はシングルトンです)
于 2008-09-19T09:16:22.857 に答える
0

減速時に変数を初期化できる場合、および初期化する場合は、ほとんどの場合、これは悪い習慣です。これがそれほど悪くないかもしれない例は次のとおりです:

string a,b;
if (Foo())
{
  a = "Something";
  b = "Something else";
}
else
{
  a = "Some other thing";
  b = "Out of examples";
}
于 2008-09-19T09:18:19.437 に答える
0

edgに同意します。また、各変数を別々の行に配置する方が読みやすく、メンテナンスが簡単であるためです。タイプ、スコープ、およびその他の修飾子がすぐに表示され、修飾子を変更すると、必要な変数にのみ適用されるため、エラーが回避されます。

于 2008-09-19T09:10:38.330 に答える
0

一般的には、他の人が議論したバージョン管理とコメントの理由によるものであり、私はすべてのケースの 95% でそれを適用します。ただし、グラフィックスをコーディングしていて、いくつかの変数でテクスチャ座標 (常に s および t として参照される) を表す場合など、それが理にかなっている状況があります。次に、それらを次のように宣言します。

int s、t; // テクスチャ座標

IMHO は、コードを短くすることと、これら 2 つの変数が一緒に属していることを明示することの両方によって、コードの可読性を高めます (もちろん、この場合、単一のポイント クラス変数を使用することを主張する人もいます)。

于 2008-09-19T09:43:45.677 に答える