bussorenre Laboratory

bussorenre Laboratory

Scala における Unit型と副作用

C系とか Java 系みたいな、手続き型には無い(無くはないけどそんなに重要視されていない)概念に 作用と副作用がある。

関数型言語では、プログラムは値を返す存在とみなされる。

Programming in Scala においては 3.5 あたりに

まずは、val、イミュータブルオブジェクト、副作用のないメソッドを優先させ、それらで出来る限りやってみる。 明確なニーズと正当化できる理由がある時に限り、var、ミュータブルオブジェクト、副作用のあるメソッドを使う

と書いてある。

副作用とはどういうことか。

例えば「標準出力にHello world を出力する」という仕様に対しては、前回書いたHelloworld だと

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, Scala world!")
  }
}

こうなっており、引数を受け取って結果(作用)を返していない(=副作用しか無い)メソッドになっている。 こういうメソッドにはUnit型が使われる。