web-dev-qa-db-ja.com

Scala over Java

私は完全にScala ...ですが、それでも、どの企業もJavaからScalaに切り替える必要があるのか​​と悩んでいます。IsScala JVMの上にシンタティックシュガーがあるか、Scala Javaよりも実際のアプリケーションを改善する)に根本的な改善がありますか?

16
Dakotah North

免責事項:私は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には actorsモデル (+その他の優れた点)があり、Javaの変更可能なデータ+スレッドモデルのロックよりも本質的に安全です(ライブラリがどの程度優れていても、Java =言語によってまだ妨げられています)。

ScalaがJavaの上に頭を抱えるほど、正直に言ってあまり考えられません。小さな利益と改善がたくさんありますが、それだけではありません。YMMV

HTH少し

19
Martijn Verburg

それは、「ただの構文糖」の定義に依存します。たとえば、Javaは、マシンコードの構文糖度以上のものですか?

どの言語でもマシンコードよりも少ないを実行できますが、これ以上実行できる言語はありません。

高水準言語によって表にもたらされるのは、コードが読みやすく、理解しやすくなり、構成が容易になり、より多くのエラーをキャッチできるようになることです。そして、私の意見では、最も違いをもたらすのはこれらの最初のものであり、正確には「ただの構文糖」です。

しかし、他の2つだけを考えると、JavaよりもScalaの利点がまだあります。

重要なことではありませんが、クロージャーを使用すると、クロージャーを使用しない場合よりもコードをより構成しやすくなります。そしてJava 7は何かを追加します呼び出されたクロージャですが、そうではありません-それらは単に無名関数です。

より多くのエラーをキャッチすることに関しては、Scalaの優れた分散処理は、それを行うのに十分な証拠です。さらに、不変性に重点を置いているため、あらゆる種類のエラーが防止されます。Javaが不変を実行できないわけではありませんが、ライブラリに付属していないためです。

9

Martijn's answer に加えて、Scala is more expressive than Java and利点は、(1)生産性が向上する、(2)同じ問題を解決するためのコードを少なくすること、つまりコード内のバグを減らすことができるということです(IMHOバグのないコードは神話です)。

2
sakisk

私はScalaを約3か月間使用していますが、Javaで実行できないものはまだ見つかりません。私にとっては、Scalaは同じことについて言及しているようです ボイラープレート。あなたが探しているものが減少している場合 ボイラープレート 次にScalaはあなたのためですが、私見、たとえば、上記のフィルタの例は、Apacheコレクションを使用して解決することもできます。

<T> CollectionUtils.filter(Predicate<T>...)

またはそのようなクロージャーを使用する

<T> CollectionUtils.forAllDo(..., Closure<T>)

しかし、もちろんもっと冗長です。型推論も好きです。 Scalaを学ぶと、これがおそらく内部で起こっていることだと気付くでしょう。私の意見では、各言語には+ veと-veが付いています。

0
user105463