web-dev-qa-db-ja.com

宣言と割り当ての分割=グッドプラクティス?

NetBeansの熱心なユーザーである私は、新しい変数を導入するときに、変数の宣言と割り当てを分割するよう提案を続けています。私の頭の上の非常に簡単な例として、これを見てみましょうJava行:

String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

対:

String someInput;
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

NetBeansは後者を好むようです(ただし、他のIDEについては知りません)。それは明らかに両方の方法で機能しますが、仮に「良い実践」と見なされたとしても、それはどうでしょうか。それとも純粋に個人的な好みの問題ですか?

(明らかに2つを分割することは、1つに組み合わせることができる追加の行を意味しますが、それは要点の外です。)

35
Fiery Phoenix

宣言と割り当てを連続した行に配置するだけの場合は、それらを分割する必要はありません。割り当てが条件付きである場合、または別のコードブロックに入れる必要がある場合(try/catchのように、または割り当てがコンストラクターなどに入る場合)にのみ、それらを分割します。

40
Bill the Lizard

初期の静的型付けプログラミングにさかのぼる一般的なパターンは、必要なすべての変数を、スコープする必要のあるブロックの先頭で宣言し、その後それらの値に割り当てることです。

とはいえ、コードの目的を、一緒に作業している人や1年以内に自分自身に明確に伝えることができさえすれば、それほど重要ではありません。

プログラムの構築に対する従来の態度を変えましょう。私たちの主なタスクはコンピュータに何をすべきかを指示することであると想像するのではなく、コンピュータに何をしてほしいかを人間に説明することに集中することにしましょう。 -ドナルドクヌース

19
jpredham

これは、7.0と7.3の間のどこかでNetBeansに追加されたオプションです。このヒントが気に入らない場合は、チェックを外すことで変更できます:ツール>オプション>エディタ>ヒント>提案>宣言の分割

Screenshot of NetBeans > Prefs > Hints > Suggestions > Split Declaration

16
Stanley De Boer

Netbeansは、コーディングを高速化できるため、これを提案しています。たとえば、この割り当てを検討してください。

final String myString = "somevalue"

次に、実際には値がbooleanに依存すると判断します

final String myString;
if(something) {
    myString = "somevalue"
} else {
    myString = "someothervalue"
}

あるものから別のものに変換するには、コードヒントを使用して、宣言と代入をスピルし、if...elseテンプレートを使用すると、ほんの数ステップでコードを生成できます。

一般に、無条件に割り当てる場合は、宣言と割り当てを分割する必要はありません。

3

大したことではないと思います。好みのスタイルを選び、それを全体に固執します(チームの場合は、全員が同じようにコードをレイアウトしている場合に役立ちます)。

個人的には、宣言の時点で変数を初期化することを好みます。そのため、後者よりも前者の方を好みます。

0
NPE

ほとんどのプログラミングコミュニティで高く評価されているコードコンプリートは、その241ページで、防御的プログラミングの問題として、宣言されたとおりに各変数を初期化するか(最初のオプション)、または最初に使用される場所の近くで初期化できることを示唆しています(2番目のオプション)。

それにもかかわらず、最初のオプションを使用すると、宣言と使用の間で変数が変更された可能性があるため、本は2番目のオプションの方が良いことを示唆しています。

あなたの場合、2番目のケースの宣言と使用法の違いは1行です。したがって、本の懸念は適用されません。それにもかかわらず、その懸念は正当であり、これがNetbeansの設計者がこのヒントを含めた理由である可能性があります(たとえそれらを使いすぎたとしても)。

0
rlinden