Java VMが大好きです。 彼女は成熟していて、速く、非常に機動性があり(ポータブル)、彼女に役立つ言語がたくさんあります。 私がJavaでプログラミングしていたとき、私はチームで唯一の作業中のLinuxコンピューターに立っていました。他のすべての人はWindowsを使用していました。 Javaで書くとき-それは重要ではありません。 実際には、それは利点でさえありました。 一部のお客様は、Unixライクシステムでソフトウェアを使用しています。 Linux上で当社の製品を使用およびテストした開発者が少なくとも1人いることは、すでに勝利でした。 ビルドダンプシステムは、弱いLinuxサーバーで実行されていました。 JavaはJava VMが存在する場所ならどこでも起動するので、顧客のような私たちのチームは誰でもソフトウェアを実行できます。
しかし、Javaは言語として、私を圧迫し始めました。 彼はほこりだらけの棚に放置されていました。 Scalaは私のお気に入りのJava VM言語であり、Javaへの道を探している多くの新しいアイデアが含まれています。
Java愛好家にとって最悪のこと-JavaはC#に遅れをとった。 私はO'Reillyの本C#a NutshellからC#を学びました 。 この本は新しい言語を学ぶのに最適な方法です。それまでに他の言語のn番目の数をすでに知っている場合。 Micorosftにチャンスを与えなければなりませんでした(たとえそれが私を傷つけたとしても)。 JavaができないC#のいくつかのことを次に示します。
- Lambda関数は、C#にある内部匿名クラスよりもはるかに優れています。
- 代表者 はい、Javaで実行できますが、それほど美しくはありません。
- 演算子のオーバーロード。 このことはすべてを地獄に変えることができますが、特にライブラリとDSLでは特に便利です
- 物性 ゲッターとセッターを記述する必要はありません。 たとえそうでなくても、すべてが直接的な魅力のように見えます。 これらはPythonとScalaのイディオムでもあり、使用を開始すると、ゲッターとセッターを使用する必要がなくなります。 foo.x + = 1はfoo.setX(foo.getX()+ 1)より読みやすい
- 反復での収量のサポート。 私はC#よりもPython(およびScala)の構文を好みますが、これは強力で非常に便利なものです。 遅延イテレータ(Python、Scala、C#で、違いはありません)を作成するためにこれを使用したことがあるなら、私が意味することを理解するでしょう。
- 拡張メソッド。 これは、C#でScalaの暗黙的な型キャストと同等であり、非常に便利です。 これにより、準備ができていても、実際の拡張なしで既存のクラスを拡張できます。 Scalaバージョンのように、暗黙的なキャストのメカニズムがあり、それらは自動的には行われません。 C#が1つの有用な側面を取り入れていることは明らかですが、Javaがこの概念によく似ていないことも明らかです。
- ??演算子のサポート。nullまたは指定されたデフォルト値でない場合、参照型の値を取得するための簡単な構文を提供します。
さらに、Javaには、C#と同じものが数多くあります。
- インターフェース
- ジェネリック
- 自動梱包および開梱。
- 注釈(C#ではこれらは属性です)
私はまだCLRではなくJVMになりやすいです。 JVMは巨大で、成熟しており、高速で、最も重要なのはモバイルです。 しかし、言語であるJavaは遅れをとっており、C#の持つ便利な機能に大きな欠陥があります。 Javaの欠陥を修正し、JVMのパワーと利便性を使用できるようにする一方で、多くの最新の機能を提供するため、私はまだScalaを使用しています。 ライブラリまたは組み込み機能を使用して、ScalaはC#などと同じ機能を提供します。 しかし、.NETの世界では、C#は共通語です。 C#と.NETはどちらもJavaとの大きな競争相手です。
SunとJavaコミュニティは、JavaがC#やScalaと比較して停滞することを許可しており、使用するのは快適ではありません。 長年のJavaプログラマーとして、私は動揺していると言わざるを得ません。