
No.1ベストアンサー
- 回答日時:
スマート、という表現が主観的なので正解はなさそうに思います。
強いて言えば、一つのプログラム内で意味もなく複数のやり方を混ぜて使うのはスマートじゃないだろうな、というくらいです。参考までに、私は基本的にコンストラクタ内で初期化しています。staticな定数なら宣言時に初期化。インスタンス初期化子は使ったことがありませんし、人のプログラムでも見たことがありません。
>>スマート、という表現が主観的なので正解はなさそうに思います。
そうですね。みんなの意見を聞いてみたいです。
>>一つのプログラム内で意味もなく
>>複数のやり方を混ぜて使うのは
>>スマートじゃないだろうな
確かに。
>>私は基本的にコンストラクタ内で初期化しています
私はいつも宣言時に初期化していました。
宣言時に初期化かつコンストラクタでも同じ値で初期化するのは、意味のないことでしょうか。

No.3
- 回答日時:
私は、趣味プログラマなので、「こうやってる」というだけですが、
3番は、初期化子の前に、宣言は必須です。よって3番は冗長なだけであり、2番の方がわかりやすくバグの危険が減ると思います。
あと、初期化データのためによほど複雑な計算があるなら、初期化子内でやることもあるのかもしれないけど、初期値にそんな複雑なデータを持たせる必要はいままでなかったので、初期化子自体使ったことがありません。
1番は、コンストラクタでの初期化時に、引数などから初期化用データをとりたいときに使います。
定数代入なら、2番にすることが多いです。eclipseを使ってると、変数の宣言部分参照で、どんなデータが入ってるかもすぐわかるので。
>>3番は、初期化子の前に、宣言は必須です。
例ですので、当然先頭に宣言があります。すみませんでした。
>>2番の方がわかりやすくバグの危険が減ると思います。
この点は私も賛同です。
>>初期化データのためによほど複雑な計算があるなら、
>>初期化子内でやることもあるのかもしれない
そうですね。
乱数値を代入したり、日付を取得するなどの作業は初期化子内で記述した方がスッキリするかも。
つまり、全コンストラクタ共通の処理を初期化子として独立させるには使えるかも知れませんね。
>>初期化子自体使ったことがありません。
これが多数はなのでしょうか。
>>eclipseを使ってると、変数の宣言部分参照で、
>>どんなデータが入ってるかもすぐわかるので。
この機能は知りませんでした。
No.2
- 回答日時:
いろいろな方の意見を聞けるといいですね。
追加の質問の件のみ回答させて頂きます。
> 宣言時に初期化かつコンストラクタでも同じ値で初期化するのは、意味のないことでしょうか。
逆にお聞きするようですが、そうすることに意味またはメリットはありますか? 私には保守性の面でのデメリットしか見えてきません。
例えばあるとき、別の値で初期化したくなったらどうするのでしょう。宣言部とコンストラクタ内と、両方修正するのでしょうか。単純に考えて面倒です。動作上はコンストラクタの方のみ値を変えれば想定通りになるでしょうが、宣言部と違う値で初期化されているのを他人が見たら、理解に苦しむでしょう。1年も放置すれば、自分のプログラムも他人が書いたものみたいに感じるものなので、未来の自分を困惑させることになるかもしれません。
そういうデメリットを上回るぐらいのメリットがないなら、いずれか一つの方法で初期化した方がよいと思います。
>>私には保守性の面でのデメリットしか見えてきません。
そうですね。浅はかでした。
他の方がどの方法で初期化してるのか参考にしてみたいですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- C言語・C++・C# 配列の初期化についてです。 int 例のプログラムで int x[5]={1,2,3,4,5}; x 1 2022/05/29 15:00
- iPhone(アイフォーン) iPhone初期化について質問です。 親から使用時間や勝手にアプリをインストールできないように規制が 2 2022/08/21 11:52
- iPhone(アイフォーン) iPhoneに詳しい方に質問です! Appleのパスワードを忘れてしまって強制初期化をしたいのですが 1 2023/01/31 22:09
- その他(ゲーム) PS4、悲しい…。 1 2022/11/22 20:34
- iPhone(アイフォーン) iPhone初期化について質問です。 クイックスタートで新しいiPhoneに移行した後、 旧いiPh 1 2022/10/24 10:56
- Java インスタンス ダウンキャストについて以下の解釈であっているか教えて欲しいです。 サブクラスをスーパー 1 2022/03/27 18:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
C#において、同じインスタンス...
-
C# インスタンスの破棄
-
生成したインスタンスを削除す...
-
javaのクラスの作り方、エラー...
-
変数名の付け方
-
VB.NET)ボックスからラベルにデ...
-
複数の変数を宣言する時、同時...
-
VB.NET getとsetの概念がわかり...
-
Delphiでインスタンスが作成さ...
-
VC#での24ビットbmp形式での保...
-
インスタンスフィールドの初期...
-
Generics extends ObjectとObje...
-
非staticフィールドを参照でき...
-
インスタンスを同じ名前で作成...
-
C# WebRequestでcookieの設定
-
VB.netで標準モジュールからフ...
-
オブジェクト参照がオブジェク...
-
String a = "a"; と String b =...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
private static という変数の修飾
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
インスタンス参照でアクセスで...
-
C# インスタンスの破棄
-
C#において、同じインスタンス...
-
オブジェクト参照がオブジェク...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
javaのクラスの作り方、エラー...
-
変数の参照でエラーが出てしま...
-
「インスタンス」の意味をわか...
-
インスタンスを同じ名前で作成...
-
newしないインスタンス?実体化...
-
フォームの存在をチェックする方法
-
String a = "a"; と String b =...
-
C#のメモリ解放についてご教授...
-
vb.netでFAXを送信する方法
-
他のファイルの変数参照
-
Delphiでインスタンスが作成さ...
おすすめ情報