6

私は、自分の組織のためにいくつかのプログラミング プラクティスの標準を設定する作業を行っています。そうすることで、「この質問のタイトル」という問題に出くわしました

変数をできるだけ遅く宣言するのが最善であると考える人もいれば、中括弧を開始するメソッドの先頭に変数を配置するのが良いと考える人もいます。

Oracle Standard はまた、それらをできるだけ早く宣言するように言っています。だから私は、それらが属する最も近い中括弧でそれらを宣言することに賛成です。

懸念事項は

  1. コードの可読性

  2. パフォーマンス

  3. エラーが発生しにくい

コメントは大歓迎です。

4

4 に答える 4

11

McConnell は必読の本 Code Complete 2 で次のように述べています。

理想的には、各変数は、それが使用される場所の近くで宣言および定義します。宣言は、変数の型を確立します。定義は、変数に特定の値を割り当てます。C++ や Java など、それをサポートする言語では、変数は最初に使用される場所の近くで宣言および定義する必要があります。

彼はまた、変数を可能な限り短時間存続させ、スコープを最小限に抑えることを推奨しています。

私にとって重要なことは、命名規則に従うことです (Sun の Java コード規則は広く使用されています)。それらが最初に宣言された場所については、パフォーマンス上の理由から、できるだけ宣言を遅らせます (使用しない可能性のある var を宣言するのは一種の無駄です)。確実に使用されることが事前にわかっていない限り、その場合は他の変数とグループ化して読みやすくすることができます。それがJCCの言っていることだと思います。

于 2012-04-18T08:48:37.147 に答える
1

コードコードの可読性については、ブロックの先頭で変数を宣言するのが最適なオプションだと思います。
コードを通過するときは、コードの行間を探す代わりに、宣言を探す場所を常に知っています。また、メソッドを見て、最初に宣言された変数を確認し、次にコードを確認することもお勧めします。レシピの説明とは別に、必要な材料をリストした料理本のレシピのように思います。

パフォーマンスに関しては、これがどのように違いを生むのかわかりません。遅延を宣言すると、ブロックの最後で必要な場合にのみ変数を作成することでメモリを節約できる可能性がありますが、ブロックの最初で宣言した場合と同じ量のメモリを使用します。

エラーが発生しやすいのは、読みやすさと同じ理由です。

必要な最小のスコープで宣言し、ブロックの先頭で宣言します。

于 2012-04-18T07:36:23.017 に答える
1

ここで重要なのは「コードの読みやすさ」だけだと思います。また、変数が使用される場所の近くで変数が宣言されている場合、コードは間違いなく読みやすくなります。

しかし、新しいプログラマーが言語間を移行する際の「エラー」を防ぐために、特定のスタイルのコーディング方法が採用される場合があります。たとえば、JavaScript には関数スコープがありますが、Java にはブロックスコープがあります。Java プログラマーは、JavaScript の機能スコープを認識していない場合、JavaScript で問題に遭遇する可能性があります。したがって、JavaScript の場合、潜在的なバグを回避するために、関数/メソッドの先頭ですべてを宣言することをお勧めします。

上で述べたように、「パフォーマンス」は気にする必要はありません。ただし、変数を使用する場所の近くで変数を宣言することを選択すると、変数の宣言と初期化のコストを削減するのに役立ちます。

于 2012-04-18T08:03:35.670 に答える
0

良い質問Javanator、私の分析によると

コードの読みやすさ:

メンテナンスが容易で混乱が少ないため、メソッドの開始時に変数を宣言することをお勧めします。

パフォーマンス:

ケース 1:

メソッドの先頭と数百のステートメントを持つメソッドで変数を宣言する場合、50 個のステートメントがそれらの変数のためにメモリを不必要に占有する前に、最後に 10 個の変数が必要です。

メソッドに 20 個の変数が必要で、最初に宣言した場合、最初のステートメントで例外が発生すると、メモリが不必要に占有されます。

ケース 2:

必要な場所で変数を宣言すると、パフォーマンスが少し向上します。

于 2012-04-18T08:43:52.690 に答える