3

最近、Java プログラミングについて話しているときに、変数のスコープと宣言について詳しく学びました。具体的には、変数は可能な限り低いスコープで宣言する必要があるということです。 これにより、新しいオブジェクトを作成して別の関数に送信する次の例について考えるようになりました。

method  {
  while(statement) {
    Object newObject;
    //method code

    if(statement) {
      newObject = new object();
    } else {
      newObject = new object();
    }
    otherMethod(newObject)
  }
}

この例と比較すると:

method  {
  while(statement) {
    Object newObject;
    //method code

    if(statement) {
      Object newObject;
      newObject = new object();
      otherMethod( newObject );
    } else {
      Object newObject;
      newObject = new object();
      otherMethod( newObject );
    }
  }
}

どちらがより正しいですか?

4

5 に答える 5

1

他の人は、最初の方がより明確であり、おそらく一般的に好まれると指摘しています。意見の余地はありますが、ほとんどの人がそれを好むことがわかると思います。ただし、物事を必要な範囲に留めようとしている場合は、実際にオブジェクトの構築をファクトリ メソッドにリファクタリングして、すべてがより明確になるようにすることをお勧めします。それ以外の:

public void frobSomeBars() {
  while ( condition1 ) {
    final Bar bar;
    if ( condition2 ) {
      bar = makeBarType1();
    } else {
      bar = makeBarType2();
    }
    frob( bar );
}

Barファクトリメソッドを書くことができます:

public Bar makeBar( final boolean condition ) {
  if ( condition ) {
    return makeBarType1();
  }
  else { 
    return makeBarType2();
  }
}

注: 私は通常、実行パスのツリーを使用してメソッドを作成することを好みます。各リーフはリターンで終了します。単一のリターンポイントを好む人もいて、ファクトリメソッドを次のように記述します。

public Bar makeBar( final boolean condition ) { 
  final Bar bar;
  if ( condition ) {
    bar = makeBarType1();
  }
  else { 
    bar = makeBarType2();
  }
  return bar;
}

次にfrobSomeBars、少し簡単です。

public void frobSomeBars() {
  while ( condition1 ) {
    final Bar bar = makeBar( condition2 );
    frob( bar );
}

あるいは:

public void frobSomeBars() {
  while ( condition1 ) {
    frob( makeBar( condition2 ));
}
于 2013-09-18T14:24:55.543 に答える