Java開発者はScalaについてどう思いますか?[閉まっている]


19

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


3
Pythonは私の宗教なので、私はGuidoがScalaをどう思うかだけを気にします。neopythonic.blogspot.com/2008/11/scala.html
ジョブ

7
Scalaは素晴らしい言語であるため、Scalaコミュニティが持つこれらすべての偉大な精神を引き付けるだけでなく、悲しいことに、言語とそれを使用している人々を攻撃する基本的なものを見つけようとする多くのうらやましい憎しみも引き付けます。
soc

@soc:明確にするために、私はScalaを嫌いではありません。Scalaを使用する人々は、おそらくがそれについて考えることあまり気にすることはできません(すべきではありません!)。複雑すぎると思います。それで全部です。大きな脳を持っている人にとっては、複雑さは大丈夫かもしれません。私はしません:-)
Joonas Pulakka

3
申し訳ありませんが、人々が主張を裏付けることなく神話を繰り返し続けると、ただイライラします。
SOC

2
@soc:まあ、この質問全体は完全に主観的なものですので、神話であろうとなかろうと、どんな答えも正しいです。
ジョナスプラッカ

回答:


18

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

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

上記の点は、Scalaを学習し始める前に私が多かれ少なかれ思っていたことです。

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

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

21

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

関数型プログラミングには、Scalaよりもずっと単純なClojureが好きです。

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


2
リッチヒッキーだけがJVMのように.Netのことを気にかけてくれたら...
ジョブ

複雑すぎると感じることについてもう少し説明しておくと役立ちます。
リチャードウォーバートン

4
@Richard Warburton:Scalaの複雑さの問題(または、Martin Oderskyが言うように、「Scalaの強さと問題:その拡張性」)は、多くのフォーラムで広く議論されてきました。1つのそのような議論はここにあります。complex == 自体が悪いと言っているわけではありません。問題は、最も明るい1%のプログラマーがScalaで奇跡を起こすことができるかもしれないが、大多数は単に「それを手に入れる」つもりはないということであり、それ実際の使用法の問題です。それはF1カーのようなものです。大多数の人々は、単純にそのような獣を運転することはできません。
ジョナスプラッカ

2
+1有効な代替手段としてClojureに言及した場合(関数型プログラミングに関して)。
オリバーワイラー

Clojureは素晴らしいですが、Scalaと同じくらいパフォーマンスが高いですか?このような静的な型付けがなくても、リファクタリングは簡単ですか?(たとえば、Pythonのリファクタリングは非常に困難です—私はそれのためにリファクタリングを書きました。)
9000

13

約1年前、Javaを使い続けた場合、スタートアップの製品の将来についてますますイライラするようになったため、Scalaを試してみることにしました。私はすでにJavaScriptとPythonでプログラミングしていましたが、Rubyも優れた代替手段でしたが、静的に型付けされた言語、できればJVMで実行できる言語を探していました。

私は本当にScalaを好きにしようとしましたが、本当にやりましたが、コードは非常にく、理解するのが難しいことがわかりました。もし私がScalaがJavaに対する最善の答えだったら、私は間違いなく好きではなかった言語で作業を続けるために間違いを犯し、宣告されたのだろうと思いました...

幸いなことに、それほど長くはかからず、私はFantomについて知りました。ああ、私はそれを愛しましたか!私にとって、それはドイツの官僚制度に対するアメリカ人の素晴らしい答えのようでした!これは、私がScalaで探していた要件と一致しましたが、はるかにエレガントです。それが持っていたのVimEclipseのNetbeansのの統合を、素敵なWebフレームワークは、成熟した製品も、小さいながらも非常に便利で実行されているコミュニティ ...動的および静的型付けを!喜んだ!

(私は続けることができますが、この投稿はFantomではなくScalaについてのものであるため、ここで停止します。2つを比較するこの投稿があるにもかかわらず、私の好みは明確です。しかし、このポッドキャスト[ mp3 ]を最後まで聴けば、私だけではないようです。)


9

私が2年前にScalaに手を出したとき、それは私にとって異質で威圧的でした。ある時点で、コア言語は実際にはJavaよりもはるかにシンプルであることがわかりましたが、その構文とセマンティクスは非常に柔軟であるため、マクロ機能がなくても、そのような新しい言語構成を作成できます。それ以来、すべてのJavaプロジェクトでScalaに完全に切り替えました。これは、定型コードをあまり作成せずに記述できるためです。

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

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

本当に言語を学び始めたときの最大のポイントは、Javaでプログラミングしただけで、ノイズなしでプログラミングできること(Groovyを起動したときのように)でしたが、最終的にはより深く力を入れてみたいと思いました言語の-それはあなたとともに成長します。

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


9

私は多くの理由でScalaが好きですが、見過ごされがちなものが1つあります。そのシンプルさです。

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ドラフトは〜310ページであり、Ruby 1.8.6、1.9.1、1.9.2の共通部分のほとんど使用できない小さなサブセットのみを指定しています。


6
言語仕様のページ数は、その複雑さの興味深い尺度です。Scalaがこれについて意見を分けているのは驚くべきことです。Pythonが複雑であるとか、C ++が単純であるとは誰も言いませんが、Scalaは両方であるようです:-)例scala-lang.org/node/7431
Joonas Pulakka

言語を使用して複雑なものを構築できます。一部は言語であるかのように見えます-非alnum名を持つメソッド。たとえば、演算子のオーバーロードのように見えますが、そうではありません。
ユーザー不明

2
言語仕様のページ数は、2つの言語の複雑さを比較するためのひどい方法です。2つの例を挙げると、Java仕様はほぼチュートリアル形式で記述され、Scala仕様は非常に簡潔な形式で記述されています。別の例として、C#2.0は実際には今日のJavaとほぼ同じくらい複雑でしたが、「安全でない」機械、デリゲート、およびプロパティを考えると、もう少し複雑でした。ただし、C#2.0仕様はJLSよりも小さいことに注意してください。
ジェームズアイリー

1
現在、Martin Oderskyは言語の正式な文法のサイズを比較しています。これは、複雑さの1つの側面の合理的な尺度です。しかし、文法は英語ほど柔軟ではないため、合理的です。それでも、注意する必要があります。ただ、通常のプログラムと同じように、あなたは簡単にストレッチやなど、どのような基底文字クラスと仮定し、組み込む方法を多くの異なる作品、それらをレイアウトする方法についてさまざまな選択肢と文法を縮小することができます
ジェームズIRY

3
待って..何?仕様のサイズで複雑さを測定しようとするのはなぜですか?そのひどいアイデア。
smartnut007

9

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

  • ヌルポインターは、そもそもかなり悪い考えでした。ホアはそれを「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は、比較すると赤ちゃんの言語のように感じます。

10
nullJavaのNULLポインターでNullあり、その「タイプ」です。Noneは、の1つの可能な「状態」でありOption[T]、1つまたはゼロの要素を持つコレクションです。Nil空のリストです。恐ろしく聞こえるようにしたいのですが、そうではありません。これらのタイプは、相互に交換または交換することはできず、本来どおりに動作します。
-soc

9

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

したがって、物事は、例えばHaskell:Typeclassesのように、それらすべてを網羅するほどまっすぐではありません。

Scalaが関数型プログラミング、オブジェクト指向、手続き型プログラミング、Javaライブラリ、および独自のアイデアをまとめようとすると、やがて「同じ方向」にあるように思われる多くの概念ができあがります

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

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

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

Scalaをできるだけ簡単に記述してください。可能なすべてのことに混乱しないで、必要なものだけを使用してください。そして、何かが必要な場合は、Scalaが何らかの形でそれを持っていると確信できます;)

そして、取得するほど、演算子、暗黙的、モ​​ナド、ファンキーな構文を使用してScalaをカスタマイズできるようになり、最終的に問題に完全に対処するDSLに近づくことができます。

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


1
「すべての演算子の上/挿入記法」-そのscalaには演算子がありません。:)それは単なるメソッドです。
ユーザー不明

6

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

Javaプログラマーであろうとなかろうと、ほとんどの人は好きではないでしょう。同じ理由で、プログラマーであろうとなかろうと、ほとんどの人は新しいプログラミング言語を学ぶことを嫌います。プログラミング言語を学んだほとんどの人は、それを学ぶことさえ好きではなかったと思います。

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

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

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


6
ScalaとClojureの入力に感謝しますが、OP iが本当に求めていることは何ですか?
マーティンウィックマン

興味深い点は、マクロです。また、少し心配です。Scalaでマクロなどを使用できますか、それとも「人工的に制限する」もの全体が邪魔になりますか?
アルマン

1
これは、元の質問に対する答えではなく、私の答えに対するコメントのようです。マクロはあなたに無限の力を与えるので、間違って使用すると、それはひどいものになります。したがって、それらを適切に使用する必要があります(必要な場合のみ)。これは、言語であるClojureが最も単純な言語の1つであるという事実を変えるものではありません。Scalaは間違いなくそうではありません。
ジョナスプラッカ

>これは、言語のClojureが最も単純な言語の1つであるという事実を変更するものではありません。<「言語構成要素の数」などのメトリックを使用している場合を除き、これも完全に偽です。言語でプログラムを読み書きするのがどれほど簡単かなど、有用なものを使用している場合、Clojureは最も単純なものの1つではありません。
ジョシュ

続けて、言語の複雑さの良い指標を教えてください。「言語でプログラムを読み書きするのはどれほど簡単か」は完全に主観的であるため、ここではあまり役に立ちません。確かに、有用客観的な指標を思い付くのは事実上不可能かもしれません。(たとえば、以下のJörgW Mittagは、言語仕様のページ数を複雑さの尺度として使用しています。客観的ではありますが、それが非常に役立つかどうかは
わかり

4

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


2

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.