タグ付けされた質問 「scala」

Scalaは、主にJava仮想マシンをターゲットとする汎用プログラミング言語です。一般的なプログラミングパターンを簡潔、エレガント、タイプセーフな方法で表現するように設計されており、命令型プログラミングと関数型プログラミングのスタイルを融合しています。

3
Closures / Lambdas /…に対するC#、Java、Scalaのアプローチのメリットとデメリットは何ですか?
Project Lambda(JSR 335)のメーリングリストに送信されたBrian Goetzの電子メールPeek Past lambdaで表明された実装のアイデアと懸念と、C#とScalaの技術的な実装の違いは何ですか? メールから: 「たぶんラムダは単に内部クラスのインスタンスであるべきで、それは本当にシンプルだろう」という道を探りましたが、最終的には「関数は言語の未来にとってより良い方向である」という立場になりました。 そしてさらに: 世界のオブジェクトであるラムダは、この将来の可能性と矛盾しています。ラムダは関数の世界観ではありません。この柔軟性を維持することは、ラムダにオブジェクト性の外観でさえ負荷をかけないことを支持するポイントの1つです。 結論: Lambdas-are-functionsはドアを開きます。Lambdas-are-objectsはそれらを閉じます。 これらのドアが開いたままになるのを好む。 また、Redditスレッドのユーザーからのコメントは次のとおりです。 私は実際にこれについてNeal Gafterにメールしました。彼の説明についての私の限られた理解では、C#と現在のJavaデザインは、デリゲートは実際にはオブジェクトであり、関数型ではありません。JavaはC#のラムダの短所から学び、それらを避けるべきだと彼は信じているようです(C#がJavaの短所から学び、最初にそれらを避けたように)。 「Lambdas-are-functions」アプローチが「Lambdas-are-objects」よりも多くの機会を将来可能にするのはなぜですか?誰かがどのような違いが存在し、それらがコードの記述方法にどのように影響するかを説明できますか? Scalaの物事が「うまくいく」ことを見て、C#/ Java(8)で採用/提案されているアプローチについて何かが欠けていると考え続けています。
30 c#  java  scala  lambda  closures 

8
現実の世界で「強力な」型システムを使用しているのは、たとえば大規模なWebアプリの場合ですか?
これは非常に広く、曖昧で、おそらく哲学的な質問であることを知っています。質問の中で最も重要なキーワードである「強力な」タイプのシステム自体は、ある程度不明確です。だから、私が意味することを説明しようとさせてください。 質問の全体的なコンテキスト 私たちはRuby on Railsで非常に大規模なWebアプリを構築してきましたが、私たちは一般的にスタックに満足しています。必要に応じて、ものを非常に高速に出荷できます-約10%のエッジケースをあまり心配することなく、「ビジネス」ケースの90%で機能するものです。一方、コードレビューとテストカバレッジの助けを借りて、ゆっくりと慎重になり、すべてのベースをカバーするようにすることができます-再び、そのような綿密な調査と安全に値する状況でのみ。 しかし、チームが成長するにつれて、スタックに焼き付けられた「セーフティネット」の欠如に不快感を覚え始めました。 最近、JavaでAndroidのネイティブ開発を開始しました。そして、私はコンパイルされた/静的な/強く型付けされた言語によって提供される安全性を(心地よく)思い出しました。 変数のつづりが間違っている、データ型が間違っている、関数の呼び出しが正しくない、些細なエラーがIDE自体でキャッチされます。IDEがコンパイラにフックして、プログラムの「正確性」の特定の側面を検証できるためです。 関数シグネチャを変更する必要がありますか?簡単です。コンパイラ+ IDEは、すべての呼び出しサイトを見つけるのに役立ちます。 特定の例外が常に処理されるようにする必要がありますか?あなたの救助のチェックされた例外。 現在、これらの安全機能には利点がありますが、それらの欠点もよく知っています。さらに、「ボイラープレートヘビー」Javaの世界では。したがって、Javaの代わりに、私は人々が最近作業を開始した多数の現代の「強く型付けされた」言語を見始めました。例:Scala、Rust、Haskellなど。私が最も興味を持っているのは、型システムと静的/コンパイル時チェックの力です。 さて、質問 これらの強力な型システムと静的/コンパイル時機能を大規模なアプリケーションで使用するにはどうすればよいですか? たとえば、これらの強力な機能の標準的な「hello world」のような紹介を超えてどのように移行するのでしょうか リッチタイプシステムを使用してビジネスドメインの問題をモデル化するものはありますか?タイプシステムは、30,000 LOC +ゾーンにいるときに役立ちますか、それとも妨げになりますか?システムが弱く型付けされた外の世界と対話するとき、これらの型システムによって提供されるセーフティネット(およびコンパイル時チェック)に何が起こるか。JSONまたはXML API、さまざまなデータストア、ユーザー入力などを介して

9
ScalaがCまたはC ++で実装されなかった理由
ScalaがCやC ++ではなくJavaと.NETで実装された理由を知っている人はいますか?ほとんどの言語はCor C ++で実装されています(つまり、Erlang、Python、PHP、Ruby、Perl)。Javaおよび.NETライブラリにアクセスできること以外に、Javaおよび.NETで実装されたScalaの利点は何ですか? 更新 Scalaは、Cで実装された場合、JVMに依存するよりもより適切に調整できるため、より多くの利益を得られませんか?
28 java  c++  .net  c  scala 

6
XtendとKotlinを使用してこれらのScalaを削減しようとするのはなぜですか?[閉まっている]
そのため、EclipseはXtendを提供し、JetBrainsはKotlinを提供しています-どちらもScalaのバージョンを骨抜きにしたようです。私の質問はなぜですか?私はスカラ座で少しプレイしたし、そうではありませんことを困難。これは、命令的なものから機能的なものへの飛躍の固有の難しさに対する単なる反応なのでしょうか、それとも他に何か機能しているのでしょうか? 編集:謝罪。最初に投稿したときに質問を読み直すと、トローリングのように聞こえるかもしれません。私が質問を表現した方法は、質問をするための最良の方法であるように見えました。「Scalaは難しすぎる/ Scalaは複雑すぎる」という効果と、「KotlinはScalaを実行しようとする試みですが、よりシンプル」というブログ投稿を見てきました。元々の言い回しはそのままにしておきますが、正直にトロールしようとしませんでした。

5
インスタンスは、より具体的なタイプの他のインスタンスと同等ですか?
私はこの記事を読みました:Javaで平等メソッドを書く方法。 基本的に、継承をサポートするequals()メソッドのソリューションを提供します。 Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true しかし、それは良いアイデアですか?これらの2つのインスタンスは同じように見えますが、2つの異なるハッシュコードを持つ場合があります。それは少し間違っていませんか? 代わりにオペランドをキャストすることで、これがよりよく達成されると思います。
25 java  c#  scala  comparison 

2
なぜScalaには戻りがあるが、壊れて継続しないのか
Scalaにはbreakor はありませんcontinue。そのため、ループの動作にはもう少し考えが必要です。 ループを早期に終了するには、末尾再帰、例外、またはscala.util.control.Breaks(例外を使用する)が必要です。 この理由は、のようにgoto、それらが流れを不明瞭にする流れの構造であり、より良く、驚くほどではない方法で達成できるということです。 しかし、それらと同じ引数を使用できるようですreturn。 なぜScalaはを意図的に省略breakしましたcontinueが、そうではなかったのreturnですか?

8
Scalaはプライムタイムの準備ができていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 Scalaを使ってささいなことをいくつかやったので( "hello world"と不自然なアプリケーションが大好きです!)、開発をサポートするツールの成熟度と、一般的な適用可能性については疑問に思っています。ツールセットは準備ができていますか?Scalaはエンタープライズ/ビジネスアプリケーションでの使用に適していますか?自明ではないプロジェクトで「あなた」はそれを使用しますか? 私の(おそらく根拠のない)懸念事項のいくつかは次のとおりです。 IDEおよびツールセットは、.netおよびjavaアプリケーションを開発するために必要なものと同じくらい豊富ですか(ScalaのEclipseはJavaのEclipseと比較して制限されているようです)? ビルド/ CI /テストツールセットはScalaを効果的に処理できますか? その言語で書かれた(奨励された)簡潔なコードはどの程度保守可能か? Scalaの経験を持つ開発者を見つけることは可能ですか? オンラインのリファレンスや、言語の「イントロ」以上の本を通して助けを得るのに十分なクリティカルマスはありますか? 結論として、エコシステムは現在使用できるほど成熟しているか、それとも進化の様子を待つほうがよいのでしょうか? 編集:「non-trivial」は、複数年、複数リリース、10〜20人の開発者プロジェクトだとしましょう。
22 scala 

5
関数型プログラミングは数学と強く関係していますか?
この質問は 、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 関数型プログラミングの多くは数学的な概念で描かれているので、関数型プログラミングは数学にとても関連していますか?命令的な背景を持つプログラマーのための関数型プログラミングを学び、理解するための強力な数学の基礎を持つ必要がありますか?

3
Scalaに最適なIDEは何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 NetbeansとEclipseでScalaをプログラミングしてみましたが、探しているものではありません。Netbeansでは、メソッド名などの提案は機能しません。Eclipseでは、F3を押しても一部のクラスソースに移動できません。(例:scala List)。 IntelliJ IDEAでのサポートは改善されていますか?Scalaをサポートする他のIDEはありますか?
20 ide  scala 

2
Scalaの他のすべてのタイプのサブタイプは何でもない
私は、Martin Oderskyのscalaを使った関数型プログラミングのコースを受講していますが、今のところ、意味が合わない2つのことを学びました。 Scalaは多重継承をサポートしていません Nothing 他のすべてのタイプのサブタイプです これら2つのステートメントは共存できませんが、これはどのように行われますか?そして、「他のすべてのタイプのサブタイプ」の意味は正確に何ですか 編集1 ではScalaのAPI、Nothingとして定義されているabstract final class Nothing extends Any...ので、どのようにそれは他のクラスを拡張することができますか?

10
Java開発者はScalaについてどう思いますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は、事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は、議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 IDEのサポートはそれほど良いものではありませんが、言語自体は関数型プログラミングのイディオムをよりきれいにサポートしています。

1
Scala関数をJava 8メソッドに渡す
次のScalaコードは機能し、関数を必要とするJavaメソッドに渡すことができます。これを行うよりクリーンな方法はありますか?これが私の最初のパスです。 val plusOne = new java.util.function.Function[Int,Int] { override def apply(t:Int):Int = t + 1 override def andThen[V](after:function.Function[_ >: Int, _ <: V]): function.Function[Int, V] = ??? override def compose[V](before:function.Function[_ >: V, _ <: Int]): function.Function[V, Int] = ??? } 2番目のパスは次のとおりです。Java-8Functionインターフェイスの汎用ラッパーを使用して、Scalaの構文を簡素化します。 // Note: Function1 is Scala's functional interface, // Function (without …

3
最も速い関数型言語
私は最近、特にHaskellとF#の関数型プログラミングを掘り下げてきました。いくつかのグーグルを回った後、より顕著な関数型言語(Scala、F#など)のベンチマーク比較を見つけることができませんでした。 一部の言語はハイブリッドであるため、必ずしも公平ではないことを知っています(Scalaが思い浮かびます)が、どの操作と全体でどのパフォーマンスが優れているかを知りたいだけです。

4
関数型プログラミングはコードを複雑にしますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 過去1年間、私はScalaコードを書いてきました(Javaのバックグラウンドから来ています)。vals、caseクラス、map / filter / lambda関数、暗黙的および型推論を使用して、よりシンプルでクリーンなコードを作成できる方法が本当に気に入りました。主にAkkaベースのアプリケーションに使用しました。 今年は、関数型プログラミングが大好きな新しいチームとScalaプロジェクトに参加しています。それらはScalazを頻繁に使用し、コードはあらゆる場所にapplicatives、context bounds、reader / writer / stateモナドで満たされ、メインメソッドもI / Oモナドに「ラップ」されます。彼らの推論は、これによりコンパイラがコードが正しいことを主張する際に「私たちのために働く」ようにし、各関数に副作用がないことです。 それでも、私の観点からすると、この構文はすべてビジネスロジックの邪魔になります。たとえば、「MyBusinessObject」のタイプは問題ありません。「List [MyBusinessObject]」、「Option [MyBusinessObject]」、「Future [MyBusinessObject]」などのタイプも同様です。それらはすべて明確な意味と目的を持っています。一方、次のようなコード: def method[M[_]: Applicative] = { case (a, b) => (ca[M](a) |@| cb[M](b)) { case t @ (ra, rb) => if (ra.result && rb.result) t.right else t.left } } それはプログラムに複雑さを追加しますか、それとも私がこのプログラミング方法に慣れていないのは私だけですか?

4
Javaのように、Scalaがパッケージのインポートに「*」ではなく「_」演算子を使用するのはなぜですか?
私の意見では、Scalaの最大の利点の1つは、Javaとの相互運用性および類似の構文です。奇妙なことに_気づい*たのは、Javaで使用されている演算子の代わりに、パッケージウィルカードのインポートに演算子を使用していることです。 の_代わりに使用する技術的な理由はあり*ますか?そうでない場合、なぜこの変更が行われたのですか?
17 java  scala 

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