Scala を勉強すべきでしょうか? [closed] 質問する

Scala を勉強すべきでしょうか? [closed] 質問する

私は平均的な Python スキルを持つ経験豊富な C++ プログラマーです。私が Python を勉強した理由は次のとおりです。

  • プログラミングに対する異なる視点を得るため (静的 vs 動的、解釈 vs コンパイルなど)
  • 取り組むことができるプロジェクトの幅を広げるため(Python を使用すると、Web 開発、Symbian フォン向けの開発、簡単なシステム管理スクリプトの作成が可能になります)
  • C++ スキルを補完するため。

Python は素晴らしいと思いますし、上記の目標を達成できたと信じています。今後も小規模なプロジェクト、スクリプト、Web 開発に Python を使い続けるつもりです。

ただし、中規模から大規模のプロジェクトに使用できるかどうかは疑問です。動的型付けは便利ですが、気になる特定の種類のバグが発生する可能性があります。ユニット テストとリンティングによってこの問題を軽減できますが、静的型付けによって完全に排除されます。

いくつかのプログラミング言語を検討した結果、Scala がよい候補に思えました。型推論が気に入っており、Scala は JVM 上で実行されるため、JVM が利用できる場所であればどこでも利用できるはずです。Scala を使用すると、関数型プログラミングについてさらに学ぶこともできます。

しかし...私もいくつか疑問を抱いており、この点については Stack Overflow コミュニティが助けてくれることを願っています。

  • 移植性: 少なくとも Linux と Windows では可能だと思います。携帯電話ではどうでしょうか。そこで実行することは可能ですか?
  • C++ 互換性: C++ コードを Scala と混在させることはできますか? (JNI?)
  • プログラミングパラダイム: 現時点では関数型プログラミング (FP) に切り替えることに抵抗を感じています。最初はオブジェクト指向と手続き型を FP と組み合わせて使用​​し、学習しながら割合を変えていくことは可能でしょうか?
  • ツール チェーンの成熟度: IDE とデバッガーの使用経験はどのようなものですか? 現在 Eclipse を使用していますが、問題ないようです。
  • 学習速度: 私の経験を考慮すると、Scala で実用的なレベルに到達するのにどれくらいの速さだと思いますか?
  • デプロイメント: Scala プログラムを正確にどのようにデプロイしますか? jar ですか、それとも実行可能ファイルですか?

最後に、Scala の欠点は何だと思いますか?

ベストアンサー1

  • 移植性: 少なくとも Linux と Windows では可能だと思います。携帯電話ではどうでしょうか。携帯電話で実行することに成功した人はいますか?

はい。Android での Scala については、かなりの動きがあります。J2ME については、その点については何か見ましたが、それほど多くはありません。ソース コード リポジトリには、J2ME に関連するコードがいくつかあります。それがどの程度実行可能かはわかりませんが、それほど需要がないように見えます。

また、Scala-Lang には望ましいターゲット プラットフォームに関するプールがあり、J2ME はその 1 つであり、優先順位が非常に低いことにも言及しておきます。

  • C++ 互換性: C++ コードを Scala と混在させることはできますか? (JNI?)

また、C++ と Java を混在させることもできます。その価値はありますが。その経験がない場合は、Java リソースを読むだけで十分です。その内容はすべて、Scala 構文を除いて変更なしで Scala に適用できます。

  • プログラミングパラダイム: 現時点では FP に切り替えるのは気が進みません。最初は OO と手続き型を FP と併用し、学習しながら比率を変えていくことはできますか?

確かにそうです。Scala は、関数型スタイルでプログラミングする必要がないように特別な配慮をしています。実際のところ、これが関数型派の人たちが Scala に対して主に批判していることです。プログラマーに関数型スタイルで書くことを強制しない限り、言語を関数型だとは考えない人もいます。

とにかく、自分のやり方で物事を進めてください。しかし、機能的だと気づかないうちに、機能的な習慣を身につけることになると思います。

おそらく、マトリックス私のブログでは、Matrix クラスの記述に関するシリーズを書いています。標準的な OO コードのように見えますが、実際には非常に機能的です。

  • ツール チェーンの成熟度: IDE とデバッガーの使用経験はどのようなものですか? 現在 Eclipse を使用していますが、問題ないようです。

IDEA (IntelliJ)、NetBeans、Eclipse はいずれも Scala をうまくサポートしています。IDEA が最高で、NetBeans/Eclipse は互いに蛙飛びを続けていますが、最近は NetBeans の方が Eclipse より確実に安定しています。一方、Eclipse のサポートは非​​常に有望な方向に進んでおり、今後 6 か月ほどで結果が出るはずです。ただ、まだ道半ばというだけです。:-)

これらの環境向けの Scala ツールの興味深い兆候としては、開発中の Eclipse プラグインが AOP を使用して IDE 全体とよりシームレスに統合されていること、NetBeans プラグインが完全に Scala で書き直されていること、そして、IDEA に Scala Power Pack があり、Java コードを Scala コードに変換する機能などをサポートしていることなどが挙げられます。

EMACS の開発者たちは Scala 用の広範なツールも持っており、多くの小規模なエディターも Scala をサポートしています。たとえば、小規模なプログラムやスクリプトに対する jEdit のサポートには非常に満足しています。

Mavenのサポートも充実しており、実際にインストールする標準的な方法はリフトMaven をインストールし、Lift アーキタイプをビルドします。これにより、適切な Scala バージョンが取り込まれます。トリガーscala:ccされた再コンパイルを実行するターゲットもあります。

再コンパイルについて言えば、Mavenも、特にAntも、再コンパイルが必要な部分を特定するのがうまくいきません。この問題からエスビーティーScala で書かれた SBT (Simple Build Tool) は、Scala コンパイラ プラグインを使用することでこの問題を解決します。SBT は Maven と同じプロジェクト レイアウトと Maven/Ivy リポジトリを使用しますが、プロジェクト構成は XML ではなく Scala コードで行われ、Maven/Ivy 構成ファイルもサポートされています。

  • 学習速度: 私の経験を考慮すると、Scala で実用的なレベルに到達するのにどれくらいの速さだと思いますか?

非常に高速です。純粋な OO 言語として、Scala にはすでにいくつかの優れた機能が導入されています。これらは C++ にはあって Java にはないものですが、動作の仕方が異なります。その点では、そのような機能の目的を理解し、それを C++ の機能と関連付ければ、Java プログラマーよりはるかに先を行くことができます。なぜなら、それらの機能をどのように活用すればよいかがすでにわかっているからです。

  • デプロイメント: Scala プログラムを正確にどのようにデプロイしますか? jar ですか、それとも実行可能ファイルですか?

Java と同じです。Scala コンパイラはクラス ファイルを生成するため、JAR、WAR、またはその他の Java ターゲットをデプロイできます。実際、クラス ファイルから Scala の JAR ファイルを生成するには Java の jar を使用し、Lift の Maven ターゲットは WAR ファイルのビルドをサポートしています。

ただし、スクリプトファイルには代替手段があります。Scalaソースコードを直接実行するために「scala」を呼び出すことができます。これはPerlやシェルスクリプトに似ています。Windowsでも実行できます。ただし、実行を高速化するためにコンパイルデーモンを使用しても、起動時間が遅いため、重いスクリプト環境でScalaを効果的に使用するには、次のようなものが必要です。ネイルガン

Scalaの欠点については、私の回答(および他の人の回答)をご覧ください。これStack Overflow の質問。

おすすめ記事