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型が使われる。