0

Functional Programming Principles in Scala | Coursera Scalaのコースを受講しています。immutabilityso many functionsおよびが実際のアプリケーションにso much dependencies on recursionどのように適しているかを理解できません。Scala

つまり、私が実行しているすべてのものの複数のコピーを使用して、またはキックインimperative languagesするリスクがあることを意味しますStackOverflowGarbage CollectionOut Of Memory

ここで何が欠けていますか?

4

2 に答える 2

3
  • スタック オーバーフロー: 再帰関数を末尾再帰にすることができます。@tailrecfromを追加しscala.annotation.tailrecて、関数が 100% 末尾再帰であることを確認します。これは基本的にループです。
  • 最も重要なことは、再帰的なソリューションは、利用可能な多くのパターンの 1 つに過ぎないということです。ミュータビリティが悪い理由については、「Effective Java」を参照してください。不変データは、大規模なアプリケーションに適しています。アクセスを同期する必要がない、クライアントがデータ内部をいじることができないなどです。多くの場合、不変構造は非常に効率的です。リストの先頭に要素を追加すると、elem :: listすべてのデータが 2 つのリスト間で共有されます。head だけが作成され、リストにポイントされます。クライアントが要求するたびに、リストの新しいディープ クローンを作成する必要があると想像してください。
  • Scala の式はより簡潔で、おそらくより怠惰です。フィルターとマップを作成し、必要に応じて適用されるすべてのものを作成します。Javaでも同じことができますが、式には永遠に時間がかかるため、通常、開発者は途中で複数の一時コレクションを作成するだけです.
  • Martin Odersky は、可変性を時間/履歴への依存と定義しています。var他のコードが何らかの形で影響を受けない限り、つまり結果が常に同じである限り、関数内で使用できるため、これは非常に興味深いことです。
  • を見てOption[T]比べてみてくださいnull。それらをfor理解して使用してください。例外は非常に例外的になりOption, Try, Box, Either、非常に良い方法で障害を伝えます。
  • Scala を使用すると、Java に比べて少ない労力で、よりモジュラーで汎用的なコードを作成できます。
  • Scala コードの良い部分を見つけて、それを Java で行う方法を試してみてください。それは自明です。
于 2014-01-04T05:03:01.510 に答える