17

Scalaには(可変状態の場合)があることは知っていvarますが、純粋関数型プログラミングは可変状態の使用を思いとどまらせ、むしろすべてに使用することに焦点を合わせてvalいます。

命令型の世界から来て、可変状態を手放すことは難しいです。

私の質問は、Scalaコードでvarを使用しても大丈夫なのはいつですか?すべてのコードは、実際にはvalだけを使用して実行できますか。はいの場合、Scalaに変数があるのはなぜですか?

4

2 に答える 2

17

Scalaでvarsを使用する理由は次のとおりです。

  • Scalaはマルチパラダイム言語であり、関数型プログラミングを促進しますが、プログラマーに選択を任せます。
  • 互換性:多くのJava APIは、可変変数を公開します。
  • パフォーマンス:varを使用すると、最高のパフォーマンスが得られる場合があります。
  • 人々がすべてが変数なしで実行できると言うとき、それはScalaがまだ変数なしで完全にチューリングしているという意味で正しいです。ただし、前のポイントの有効性については何も変わりません。
于 2012-10-27T06:06:57.763 に答える
8

関数型プログラミングの観点からも、変数(または可変オブジェクト)が定義されているスコープを離れない場合は、ローカルで変数(または可変オブジェクト)を使用できます。

たとえば、リストのサイズを返すこの(考案された)関数について考えてみます。

def dumbSize( lst: List[Int] ): Int = {
   var i = 0
   var rest = lst
   while( rest != Nil ) {
     i += 1
     rest = rest.tail
   }
   i
}

この(醜い)関数はvarsを使用しますが、それでも純粋です(副作用はなく、指定された引数値に対して常に同じ結果を返します)。

「可変状態カプセル化」の別の例は、アクターモデルであり、アクター状態はしばしば可変です。

于 2012-10-27T06:55:15.817 に答える