別の側面:
Javaは非常に厳密な機能を持つ静的言語です。これは、他の言語(c / f Ruby、Lispなど)で非常にオープンまたはダイナミックになる多くのものが厳密に決定されることを意味します。
これは一般的な設計上の決定です。「理由」に答えるのは難しいです(まあ、言語の設計者はそれが良いと思ったからです!)「何のために」は非常に明確です:それはコンパイラが多くのエラーを検出することを可能にします。それは一般にどんな言語にとってもかなり良い機能です。第二に、言語について比較的簡単に推論することができます。たとえば、Java言語(のサブセット)で正式な証明を作成するのは比較的簡単です。比較として、Rubyなどの動的言語では事実上不可能です。
この考え方は、言語に浸透します。たとえば、メソッドがスローできる例外の強制的な宣言、曖昧な多重継承を避けるためのinterface
vs の個別のタイプなどclass
です。それが何であるか(コンパイル時のエラー処理に重点を置いた静的な命令型OOPの実世界の言語)については、実際には非常にエレガントで強力です。これらは、これらの問題の一部を調査するために意図的に作られた理論的(科学的)言語に近づきます(他の実際の言語よりも)
そう。厳密なvoid
型を持つことは明確なメッセージです。このメソッドは何も返しません、期間。それが現実さ。常に何かを返すように強制で置き換えると、はるかに動的な振る舞いになります(すべての defが常に明示的または暗黙的な戻り値を持つRubyのように)。これは、証明可能性と推論に悪いでしょう。またはここで他のメカニズムを使用して大規模に膨らませます。
(そして、NB、ルビー(例えば)のハンドルは、この異なっており、その解決策はまだ正確として受け入れ、それは完全に異なる哲学を持っているので、Javaのように。入れながら、例えば、それは完全に窓の外に証明可能性と合理性をスロー大に焦点を言語の非常に高い表現力。)