私は正式なOracleのドキュメントへのリンクを与えられました。https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
それが言われています。
デフォルト値
これは、フィールドが宣言されたときに値を代入することは必ずしも必要ではないのです。宣言されていますが初期化されていないフィールドは、コンパイラによって適切なデフォルトに設定されます。一般的に言って、このデフォルトでは、データの種類に応じて、ゼロまたはNULLになります。そのようなデフォルト値に頼って、しかし、一般的に悪いプログラミングスタイルと見なされます。
私はこの部分強調したいです:
そのようなデフォルト値に頼って、しかし、一般的に悪いプログラミングスタイルと見なされます。
しかし、ああ、これは、私が言う、インスタンス変数にデフォルト値を持っていることを知っている言語仕様の基本的な部分です。なぜ地球上でこれは悪いプログラミングの練習、それが広くJava SEのライブラリのソースコードにしても使用されている場合は?
引用されたテキストは、次のとおりです。
「そのようなデフォルト値に頼って、しかし、一般的に悪いプログラミングスタイルと見なされます。」
皮肉:多くの場合、著者が提示されている声明の信頼できるソースを見つけることを試みていないことを言うの道である「ことが一般的と考えられます」。
この場合、アサーションは明らかに疑問があります。証拠:サンプリングされた5つのJavaのスタイルガイドの5うち、あなたがまたはデフォルト値に頼らなければならない必要があるかどうかについては何も言うことはありません。
- GoogleのJavaのスタイルガイド
- TwitterのJavaのスタイルガイド
- Javaのプログラミングスタイルガイド- JavaRanch(疑わしいです)
- Javaコードスタイルガイドライン -コーネル大学CS。
- OpenJDKのドラフトJavaのスタイルガイド
(注、サンプリングのための私の方法論は、「Javaのスタイルガイド」の最初の5本の個別のGoogleの検索ヒットを見ていた。それから私は「デフォルト」の各ドキュメントを検索する。これは、徹底的な分析ではありませんが、それは私のポイントを作るのに役立ちます。 )
OK。だから、本当にJavaコードの可読性を助けていますか?
これは議論の余地があります。
一方では、初心者のJavaプログラマのデフォルトの初期化について学習していない人は、ゼロまたはヌルがどこから来ているのか困惑することができます。彼らは、明示的な初期化のために見にわざわざと発見した場合でも、デフォルトの初期化について調べるためにチュートリアルや本を読むためにそれらを引き起こすのに十分であるべきである1、ありません。(あなたが望んでいるだろう!)
一方、我々は通常、初心者のJavaプログラマは、生産、コードベースを維持することを期待しないでください。経験豊富なJavaプログラマのための冗長な初期化は、読みやすさを改善しません。これは、ノイズ(最高で)です。
私の心に、フィールドの冗長初期化することにより達成される唯一のことは、あなたがしていることをあなたのコードの将来のリーダーに知らせるためにあると思っ初期値について。(@GhostCatがそれを発現するように、デフォルトの初期化が意図通信しません。)
しかし、私はそのリーダーだった逆にあれば、私は必ずしもコードの作者の考えを信用しないでしょう。だから、この「信号」の値も疑問です。
どのような信頼性はどうですか?
Javaでは、それは違いはありません。JLSの指定、デフォルトの初期化はないフィールドに対して発生します。そして逆に、ローカル変数のために、間違いなく初期化されていない変数を使用しようとするコンパイルエラーです。
要するに、明示的に初期化されていない変数の実行時の動作は完全に予測可能です。
変数が初期化されないことがCまたはC ++のような言語では対照的に、動作は未指定、およびクラッシュにつながることができ、異なるプラットフォーム上で動作の違い。常に明示的に変数を初期化する場合は、ここでははるかに強いです。
どのようなパフォーマンスは?
それは何の違いを作るべきではありません。JITコンパイラは、同じように冗長初期化し、デフォルトの初期化を処理することができるはずです。