ちいさな引き出し

お宝からガラクタまで

Scalaの変数について

valとvar2つの変数

Scalaには変数を定義するにはvalまたはvarを使います。

scala> val text1 = "foo"
scala> var text2 = "bar"

val はJavaで言うところのfinal修飾子が付いた変数で再代入ができない。 var にはこの制約はありません。

scala> val text3 = "hello"
// val text3 = text3 + "world"
// これはできない。コンパイルエラーとなる。

また下記のようにした場合、mとは別の新しいインスタンスが返される。

scala> val m = Map(1->"japan",2->"usa",3->"chaina")
scala> m + (4 -> "russia")
scala> println(m)の結果はkey が1,2,3のMapが出力されます。

val は再代入はできないが再定義は可能

scala> val color = "red"
scala> println(color) // red
scala> val color = "blue"
scala> println(color) //blue

valを使うことでどのタイミングで参照しても同じ値を返す「参照透過性」がある。 この参照透過性が関数型プログラミングにとっては重要とのこと。また変数の代入やIO処理のプログラムの実行によって状態が変わってしまい。参照処理の結果が変わってしまうことを「副作用がある」と言うらしい。

広告を非表示にする