IDEのサポートはそれほど良いものではありませんが、言語自体は関数型プログラミングのイディオムをよりきれいにサポートしています。
IDEのサポートはそれほど良いものではありませんが、言語自体は関数型プログラミングのイディオムをよりきれいにサポートしています。
回答:
私はもう1年以上Scalaをプログラミングしているので、この質問に答えるために1年戻ります。
上記の点は、Scalaを学習し始める前に私が多かれ少なかれ思っていたことです。
一年の間に、私が見つけたものは次のとおりです。
さて、Scalaは複雑すぎると思います。それは物事を行う無数の異なる方法を持っているという点でC ++のように感じます。これを「豊かさ」、「表現力」または「力」と呼ぶ人もいますが、あなたの走行距離は異なる場合があります。多くの現実世界のプロジェクトでは、使用する言語機能と使用しない言語機能を人為的に制限する必要があるため、関係するすべての開発者が言語の同じサブセットを話すことができます。
関数型プログラミングには、Scalaよりもずっと単純なClojureが好きです。
聖戦を始めましょう;-)
約1年前、Javaを使い続けた場合、スタートアップの製品の将来についてますますイライラするようになったため、Scalaを試してみることにしました。私はすでにJavaScriptとPythonでプログラミングしていましたが、Rubyも優れた代替手段でしたが、静的に型付けされた言語、できればJVMで実行できる言語を探していました。
私は本当にScalaを好きにしようとしましたが、本当にやりましたが、コードは非常にく、理解するのが難しいことがわかりました。もし私がScalaがJavaに対する最善の答えだったら、私は間違いなく好きではなかった言語で作業を続けるために間違いを犯し、宣告されたのだろうと思いました...
幸いなことに、それほど長くはかからず、私はFantomについて知りました。ああ、私はそれを愛しましたか!私にとって、それはドイツの官僚制度に対するアメリカ人の素晴らしい答えのようでした!これは、私がScalaで探していた要件と一致しましたが、はるかにエレガントです。それが持っていたのVim、EclipseのとNetbeansのの統合を、素敵なWebフレームワークは、成熟した製品も、小さいながらも非常に便利で実行されているコミュニティ ...動的および静的型付けを!喜んだ!
(私は続けることができますが、この投稿はFantomではなくScalaについてのものであるため、ここで停止します。2つを比較するこの投稿があるにもかかわらず、私の好みは明確です。しかし、このポッドキャスト[ mp3 ]を最後まで聴けば、私だけではないようです。)
私が2年前にScalaに手を出したとき、それは私にとって異質で威圧的でした。ある時点で、コア言語は実際にはJavaよりもはるかにシンプルであることがわかりましたが、その構文とセマンティクスは非常に柔軟であるため、マクロ機能がなくても、そのような新しい言語構成を作成できます。それ以来、すべてのJavaプロジェクトでScalaに完全に切り替えました。これは、定型コードをあまり作成せずに記述できるためです。
私はClojureが好きですが、プラットフォームで静的バイトコード(Android、アプレットなど)にコンパイルする必要がある場合がありますが、Scalaではそれができます。
Scalaでは多くの問題を機能的な方法で解決できますが、クラスの使用がより自然に感じられる問題をよく見つけます。それは物事をもう少し複雑にしますが、C ++の複雑さと苦痛に近いところはありません。
本当に言語を学び始めたときの最大のポイントは、Javaでプログラミングしただけで、ノイズなしでプログラミングできること(Groovyを起動したときのように)でしたが、最終的にはより深く力を入れてみたいと思いました言語の-それはあなたとともに成長します。
IDEに関する質問:すべてにEmacsを使用した後、私のIDEの問題はすべてなくなりました:-)
私は多くの理由で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の共通部分のほとんど使用できない小さなサブセットのみを指定しています。
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と間違われることを避けるために、私が気に入っているのは次のとおりです。
null
JavaのNULLポインターでNull
あり、その「タイプ」です。None
は、の1つの可能な「状態」でありOption[T]
、1つまたはゼロの要素を持つコレクションです。Nil
空のリストです。恐ろしく聞こえるようにしたいのですが、そうではありません。これらのタイプは、相互に交換または交換することはできず、本来どおりに動作します。
Scala は複雑です。それを回避する方法はありません!その構文は非常に柔軟であり、さまざまな方法でカスタマイズできます(すべての演算子/中置表記法より上)-型システムには、私が知っている他の言語とは異なる機能があります。
したがって、物事は、例えばHaskell:Typeclassesのように、それらすべてを網羅するほどまっすぐではありません。
Scalaが関数型プログラミング、オブジェクト指向、手続き型プログラミング、Javaライブラリ、および独自のアイデアをまとめようとすると、やがて「同じ方向」にあるように思われる多くの概念ができあがります。
それらの中から選択することは、最初は難しいように思われ、ある問題の正しい解決策を見つけたかどうかを簡単に疑問に思うかもしれません。implicit
s を乱用することで、ハッキングなものを作成することさえ簡単に可能です。
しかし興味深いのは、Scalaが機能することです。理由を理解するのは難しい場合があります(特に、暗黙的な変換+継承+ ...いくつかのオブジェクトが機能を持っていることを理解することX
)。しかし、ほとんどの場合、そのことを気にする必要はありません。
Scalaをできるだけ簡単に記述してください。可能なすべてのことに混乱しないで、必要なものだけを使用してください。そして、何かが必要な場合は、Scalaが何らかの形でそれを持っていると確信できます;)
そして、取得するほど、演算子、暗黙的、モナド、ファンキーな構文を使用してScalaをカスタマイズできるようになり、最終的に問題に完全に対処するDSLに近づくことができます。
結局のところ、Scalaをはるかに優れたJavaとして、より簡潔で簡単な構文、型推論、およびいくつかの機能的機能を備えたものとして使用する可能性が常にあります。
これは、多くの点でJavaよりも単純な優れた言語です。
Javaプログラマーであろうとなかろうと、ほとんどの人は好きではないでしょう。同じ理由で、プログラマーであろうとなかろうと、ほとんどの人は新しいプログラミング言語を学ぶことを嫌います。プログラミング言語を学んだほとんどの人は、それを学ぶことさえ好きではなかったと思います。
C ++ほど複雑な言語が心配な場合は、疫病のようなClojureを避けます。ScalaがClojureよりも複雑であるということは、1つまたは両方の言語について完全に無知な人々にとってのフォールバック引数になっています。
Clojureにはマクロがあります。これは、言語の構文を必要なだけ変更できることを意味し、「無数のさまざまな方法」だけでなく、ほぼ無数の方法を提供できます。また、プログラマがマクロで作成しているこの新しい構文は、言語仕様のどこにも文書化されていません。
「しかし、マクロの使用を避けたり、コードで許可されるマクロを規制したりできます」とあなたは言います。おめでとうございます。「使用する言語機能と、使用しない言語機能を人為的に制限する」ことになります。これは、ScalaのClojureを使用しているせせらぎバカがScalaを回避する理由として使用したものです。
Javaプログラマーとして、最初はScalaが面白いと感じました。しかし、しばらくの間(そして他の人によって既にリストされたほぼすべてのポジティブ/ネガに出くわして)しばらくそれを使った後、私はそれに非常に「まあ」と感じました。言語の改善は、ツールセットの可用性の低下により相殺されます。切り替える理由を明確にすることができませんでした。それは良いことですが、切り替えを主張するのに「十分」ではありません。主観的な興奮因子もありません(Clojureのように)。