4

これは一種の設計上の問題であり、両方の方法で行う人がいると確信しています。しかし、あなたの意見では、クラスまたはコンストラクターで変数を割り当てる方が良いですか? 例(構文や言語に関係なく、これは説明のためのものです):

public class Example
{
   private final int TIME_STAMP = Now();
   private int num = 2;
}

また

public class Example
{
   private readonly int TIME_STAMP;
   private int num;

   public Example()
   {
      TIME_STAMP = Now();
      num = 2;
   }
}

異なる言語と構文の混在は無視してください...どちらが望ましいですか?またその理由は?

4

5 に答える 5

4

するつもり :

  • クラス自体にデフォルトの定数値を設定する
  • コンストラクターの他の何か (現在の時間など) に依存する値。


つまり、私は次のようなものを使用する傾向があります(2つの例をマージします) :

public class Example
{
   private readonly int TIME_STAMP;
   private int num = 2;

   public Example()
   {
      TIME_STAMP = Now();
   }
}

しかし、私の好みの言語は PHP であり、クラス宣言自体に定数以外の値を設定することはできないため、私の方法は少し偏っている可能性があります。

于 2010-02-03T18:06:44.013 に答える
2

インライン (最初のオプション):

  • それはより読みやすいです
  • すべてのコンストラクターで複製する必要はありません
  • あなたの言語にそのようなものがあれば、初期化ブロックを使用できます。コンストラクターのように見えますが、複数回定義する必要はありません。Java では、次のようになります。

    {
        var1 = 5;
        varTime = now();
    }
    
于 2010-02-03T18:04:50.893 に答える
1

ここでの主な考え方は、クラスの起動コードまたは初期化コードをコンストラクターに入れることです。これとは対照的に、論理的には、デストラクタにクリーンアップ コードを配置します。

于 2010-02-03T18:07:39.707 に答える
1

テスト容易性の観点からは、どちらのアプローチにも問題があります。定数を除いて、これらを引数として受け入れるコンストラクター、またはバッキング フィールドを設定できるプロパティが必要です。
通常、クラスを完全に制御できる「フル」コンストラクターと、デフォルト引数を指定して他のコンストラクターを呼び出す空/デフォルト コンストラクターを作成します。そうすれば、すべてが 1 か所にまとめられ、構築時に何が起こっているかを把握するためにバッキング フィールドを調べに行く必要がなくなります。

于 2010-02-03T18:38:52.917 に答える
0

使用している言語に大きく依存します。たとえば、PHP では、クラスですぐに定義できるのは定数だけです。ただし、言語間の互換性を確保する場合は、コンストラクターですべてのクラス変数に値を割り当てることをお勧めします。

于 2011-12-19T18:18:28.337 に答える