私は完全にScala ...ですが、それでも、どの企業もJavaからScalaに切り替える必要があるのかと悩んでいます。IsScala JVMの上にシンタティックシュガーがあるか、Scala Javaよりも実際のアプリケーションを改善する)に根本的な改善がありますか?
免責事項:私はScalaの第一人者ではありません。
Scalaは2つのことを非常にうまく行っていますが、Java(現在)ではできません)。
機能的な問題を解決します
最も基本的なレベルでは、Scalaはコレクションをサポートする完全な機能を備えたクロージャーを備えています。つまり、(DZoneの投稿を恥知らずに取り除いた)などのボイラープレートコードを記述する必要がなくなりました。
public List<Item> bought(User user)
{
List<Item> result = new ArrayList();
for (Item item : currentItems)
{
if (user.bought(item))
{
result.add(item);
}
}
return result;
}
しかし、代わりに次のようなものを書きます:
def bought(user: User) = items.filter(user bought _)
並行性をより安全な方法で解決します
ScalaがJavaの上に頭を抱えるほど、正直に言ってあまり考えられません。小さな利益と改善がたくさんありますが、それだけではありません。YMMV
HTH少し
それは、「ただの構文糖」の定義に依存します。たとえば、Javaは、マシンコードの構文糖度以上のものですか?
どの言語でもマシンコードよりも少ないを実行できますが、これ以上実行できる言語はありません。
高水準言語によって表にもたらされるのは、コードが読みやすく、理解しやすくなり、構成が容易になり、より多くのエラーをキャッチできるようになることです。そして、私の意見では、最も違いをもたらすのはこれらの最初のものであり、正確には「ただの構文糖」です。
しかし、他の2つだけを考えると、JavaよりもScalaの利点がまだあります。
重要なことではありませんが、クロージャーを使用すると、クロージャーを使用しない場合よりもコードをより構成しやすくなります。そしてJava 7は何かを追加します呼び出されたクロージャですが、そうではありません-それらは単に無名関数です。
より多くのエラーをキャッチすることに関しては、Scalaの優れた分散処理は、それを行うのに十分な証拠です。さらに、不変性に重点を置いているため、あらゆる種類のエラーが防止されます。Javaが不変を実行できないわけではありませんが、ライブラリに付属していないためです。
Martijn's answer に加えて、Scala is more expressive than Java and利点は、(1)生産性が向上する、(2)同じ問題を解決するためのコードを少なくすること、つまりコード内のバグを減らすことができるということです(IMHOバグのないコードは神話です)。
私はScalaを約3か月間使用していますが、Javaで実行できないものはまだ見つかりません。私にとっては、Scalaは同じことについて言及しているようです ボイラープレート。あなたが探しているものが減少している場合 ボイラープレート 次にScalaはあなたのためですが、私見、たとえば、上記のフィルタの例は、Apacheコレクションを使用して解決することもできます。
<T> CollectionUtils.filter(Predicate<T>...)
またはそのようなクロージャーを使用する
<T> CollectionUtils.forAllDo(..., Closure<T>)
しかし、もちろんもっと冗長です。型推論も好きです。 Scalaを学ぶと、これがおそらく内部で起こっていることだと気付くでしょう。私の意見では、各言語には+ veと-veが付いています。