web-dev-qa-db-ja.com

Java開発者はScalaをどう思いますか?

IDEのサポートはそれほど優れているわけではありませんが、言語自体が関数型プログラミングイディオムをはるかにきれいにサポートしています。

19

私はScalaを1年以上プログラミングしているので、この質問に答えるために1年前に戻ろうと思います。

  • ScalaコードはJavaコードよりも簡潔です(セッターやゲッターはなく、多くの型情報を推測できます)
  • XMLリテラルの組み込みサポートは非​​常に魅力的です。
  • Javaライブラリの互換性と相互運用性は素晴らしい
  • 特定の機能的イディオムのサポートが更新されました(理解、クロージャー、ラムダ関数、マップ、フォールド、リデュース)
  • 言語作成者が含めたくないクールな機能はないようです

上記の点は、私がそれを学び始める前に、私がScalaについて多かれ少なかれ思ったものでした。

1年の間に、私が見つけたものは次のとおりです。

  • 階段本 を購入することは大きな投資であり、自分で学習する時間を節約できました
  • 構文にはいくつかの奇妙な点があり、何かが有効ではない理由に本当に戸惑うことがありました。トレードオフは、慣れるとコードがすっきりして読みやすくなります。コードを書くのではなく読む場合、これは実際には問題ではないことに注意してください。
  • 2.8のコレクションライブラリを使用できます。 Javaに戻るのは難しいです。
  • XMLリテラルはいいですが、いくつかの基本的なことを超えて、Javaライブラリエコシステムに手を差し伸べる必要がありました。でも便利です。
  • JavaのScalaライブラリを使用すると、非常に簡単で便利です。 ScalaのJavaクラスを使用するのは少し難しいですが、機能します。
  • IntelliJ IDEAコミュニティエディションに切り替えました。完璧ではありませんが、それで十分です。
  • 言語クリエーターは、機能のセットについて本当に考え、すべてが本当にうまく連携しています。オブジェクト指向のサポートはJava(トレイト付き)よりも優れており、関数型プログラミングを実行できます。
  • これは、一部のJava開発者が情熱を持って嫌うように見える言語です。私にとっては、プログラミングの喜びを取り戻しました。
18
huynhjl

まあ、私はScalaは複雑すぎると思います。無数の異なる方法を持っているという点でC++のように感じます。これを「豊かさ」、「表現力」、または「力」と呼ぶ人もいます。多くの実際のプロジェクトでは、使用する言語機能とそうでない機能を人為的に制限し、関係するすべての開発者が同じ言語のサブセットを話せるようにする必要があります。

関数型プログラミングでは Clojure を好みます。これはScalaよりもはるかに単純です。

聖戦を始めましょう;-)

21
Joonas Pulakka

約1年前、Javaを使い続けるとスタートアップ製品の将来にますます不満が出てきたので、Scalaを試してみることにしました。すでにJavaScriptでプログラミングしていて、 Python、Rubyも良い選択肢でしたが、私は静的に型付けされた言語、できればJVMで実行できる言語を探していました。

私は本当にScalaを好きにしようとしましたが、本当に好きでしたが、それはコードがまったく醜くて理解しにくいことに気付きました。 ScalaがJavaへの最良の答えである場合、私は間違いなく私が嫌いな言語での作業を続けるようにねじ込まれ、刑を宣告されました...

幸いなことに、その後あまり長くはありませんでしたが、私は Fantom について知りました。ああ、私はそれを好きでしたか!私にとっては、ドイツの官僚制に対するアメリカ人の素晴らしき答えのようでした! Scalaで探していた要件と一致しましたが、はるかに エレガント でした。 VimEclipse および Netbeans 統合、Nice webフレームワーク 、成熟した products =小さくても信じられないほど便利です community ...動的および静的型付け!嬉しかった!

(私は続けることができますが、この投稿はFantomではなくScalaに関するものであるため、ここで停止します。私の好みは clear ですが、この post が2つを比較しています。I Scalaと比較してFantomがそれほど注目されない理由を理解することはできませんでした。しかし、このポッドキャスト[ mp ]を最後まで聴くと、明らかに私だけではありません。)

14
ivo

私は多くの理由でScalaが好きですが、見落とされがちなものがあります。その単純さです。

Scalaは、たとえばOberonほど単純ではないかもしれませんが、他のいくつかの言語よりもかなり単純です。 Scala言語仕様は〜160ページ、Java言語仕様は〜600(JVMやライブラリではなく言語のみ)です)、ECMA -334 C#言語仕様(AFAIKはVisual C#2.0のサブセットに対応します)は最大440ページです(これには、LINQクエリ内包表記、ラムダ式、拡張メソッド、一般的な共分散および反変、dynamic、デフォルト値を含むオプションの引数、キーワード引数、var)。ECMAScript 5.1の現在のドラフトでさえ、最大で210ページです。そしてもちろん、私自身の「デフォルト」言語であるRubyの現在のISOドラフトは、 Ruby 1.8.6、1.9.1、および1.9.2の共通部分のほとんど使用できないほど小さなサブセットのみを指定している〜310ページ。

9
Jörg W Mittag

Scalaの欠点は次のとおりです。

  • Nullポインターは、最初からかなり悪い考えでした。ホアレはそれを「10億ドルの間違い」と呼んだが、Scalaはさらに悪い。 null、Null、None、Nilという名前のオブジェクトがあります。 nullはJavaとの相互運用性のためのものです。 NullはW3C DOM仕様のnullポインターであり、Noneはnullが置き換えられるべきものであり、Nilは空の何かです。

  • 言語構造がハックであることが判明した場合、通常はプログラマーが責任であり、言語ではありません。ただし、Scalaでは、コア言語にはすでに「これはハックです」という文書化された動作のライブラリクラスが含まれています。信じられない? scaladocでscala.xml.Groupを検索します。

  • 最後に重要なこととして、Scalaのドキュメントは不適切です。公式ドキュメントのscalaクラスには、サンプルコードがほとんどありません。 ScalaはJavaよりも学習が非常に難しく、コンピュータサイエンスの深い知識が必要です。

Scala-haterと間違われるのを避けるために、ここで私が気に入っているのは次の点です。

  • 例外が少ない。 Javaとやり取りするときにClassCastExceptionが発生したことはなく、NullPointerExceptionsはほとんどありませんでした。
  • コードはJavaよりもはるかに短く簡潔です
  • それは知的に挑戦的です。 Javaを比較すると、赤ちゃんの言葉のように感じます。
9
Stefan D.

Scala is複雑です。それを回避する方法はありません!その構文は非常に柔軟であり、さまざまな方法でカスタマイズできます(すべての演算子/中置表記より上)。また、型システムには、私が知っている他の言語とは異なる機能があります。

したがって、物事はそれほど単純ではありません。 Haskell:Typeclassesですべてをカバーします。

Scalaは、関数型プログラミング、オブジェクト指向、手続き型プログラミング、およびJavaライブラリと独自のアイデアをまとめようとするため、最終的にどういうわけか「同じ方向に」行くように見える多くの概念

  • 暗黙的な値
  • 暗黙的な関数
  • 存在
  • ワイルドカード
  • 特性
  • インターフェース
  • 抽象クラス
  • ケースクラス
  • 構造タイプ
  • 一般的な制約
  • 境界を表示
  • 匿名型

それらの中から選択することは最初は難しいようであり、ある問題の正しい解決策を見つけたのか疑問に思われるかもしれません。 implicitsを悪用することで、ハッキングされたものを生成することも簡単に可能です。

Scalaは機能します。理由を理解するのが難しい場合があります(特に、暗黙的な変換+継承+ ...一部のオブジェクトが機能を備えていることを理解するX)が、ほとんどの場合、そのことを気にする必要はありません。

書きますScala可能な限り簡単で、機能します。可能なことすべてに混乱しないで、必要なものだけを使用してください。そして、必要な場合は、あなたはどういうわけかScalaそれを持っていることを確認することができます;)

そして、あなたがより良いものになるほど、Scalaを演算子、暗黙的、モ​​ナド、ファンキーな構文でカスタマイズできるようになります...そして最後に、あなたの完全に対処するDSLに近いものを取得します問題。

結局のところ、あなたは常にScalaはるかに優れたJavaを使用する可能性を常に持っています。Java$ ===は、より簡潔で簡単な構文、型推論、およびいくつかの機能的機能を備えています。

9
Dario

Scalaを2年前に初めて手にしたとき、それは異質で威圧的に見えました。ある時点で、コア言語は実際にはJavaよりもはるかに単純ですが、その構文とセマンティクスはそうですマクロ機能がなくても、そのような新しい言語構成を作成できる柔軟性があります。以来、私は完全にScala for my my Javaボイラープレートコードを多くせずに記述できます。

私はClojureが好きですが、プラットフォームで静的バイトコード(Android、アプレットなど)にコンパイルする必要がある場合がありますが、Scalaではそれが可能です。

Scalaを使用すると、機能的な方法で多くの問題を解決できますが、クラスを使用するほうが自然な感じがする問題がよくあります。これにより、状況は少し複雑になりますが、C++の複雑さと苦痛に近いところはありません。

私が実際に言語を学び始めたときの最大のポイントは、Javaでプログラミングしただけで、ノイズがまったくない(Groovyを起動したときと少し似ている)ことができたということですが、最終的には、パワーをさらに深く掘り下げたいと思います。言語の-それはあなたと共に成長します。

IDE質問について:すべてにEmacsを使用した後、私のすべてのIDE問題がなくなりました:-)

9
boxofrats

これは、多くの点でJavaよりも単純な優れた言語です。

Javaプログラマーであろうとなかろうと、ほとんどの人はプログラマーであろうとなかろうと、ほとんどの人、プログラマーであろうとなかろうと、新しいプログラミング言語を学ぶのが好きではないでしょう。プログラミング言語はそれを学ぶことすら好きではなかった。

C++ほど複雑な言語が心配な場合は、ペストのようなClojureは避けます。 Scalaは、Clojureが1つまたは両方の言語について完全に無知である人々のフォールバックの議論になっているよりも複雑です。

Clojureにはマクロがあります。つまり、必要に応じて言語の構文を変更できるため、「無数のさまざまな方法」だけでなく、ほぼ無限の数の方法を実行できます。そして、プログラマーがマクロで作成しているこの新しい構文は、言語仕様のどこにも文書化されません。

「しかし、私たちはマクロの使用を避けたり、コードで許可されているマクロを規制したりできます」とあなたは言う。おめでとうございます。「使用する言語機能と使用しない言語機能を人為的に制限する」必要があります。これは、Clojure Scala Scalaそもそも避けた理由。

6
Josh

Scalaライブラリのより詳細な型が本当に好きです。新しいコレクションライブラリはよく考え抜かれたようです。シンプルなクラスに必要なコードの量を減らし、関数型それが追加する概念です。その型推論も非常に役に立ちます。Javaトレーニングホイールなしで使用できます。しばらくC#を使用した後、Scalaは実際にはJavaはまだ有用ですが、取り残されている競合他社。

4
Matt H

Javaプログラマーとして、私は最初にScala興味深いものを見つけました。しかし、しばらくの間それを試してみた後(そしてすでにリストされているほぼすべてのポジティブ/ネガティブに遭遇した後)他の人)、私はそれに非常に「まあ」感じていました。言語の改善は、ツールセットの利用可能性の低下によって相殺されました。切り替えるべき明確な理由を思いつくことができませんでした。それは良いことですが、「十分に良い」ではありません「切り替えを主張する。Clojureのように、その主観的な興奮要因もありません。

2
Brian Knoblauch