これはわかりやすかった。
scala> val x = "Hello,World" x: String = Hello,World scala> val x1 = x.reverse x1: String = dlroW,olleH scala> val x2 = x.reverse x2: String = dlroW,olleH
x1とx2に変化はない。常に与えられた引数に対して等しい結果を返す。
でも、StringBuilderになると話が変わってくる。
scala> val sb = new StringBuilder("Hello") sb: StringBuilder = Hello scala> val sb1 = sb.append(",World").toString sb1: String = Hello,World scala> val sb2 = sb.append(",World").toString sb2: String = Hello,World,World
ひぇ〜 sb1とsb2で値が違うじゃないですか。appendするとappend元のオブジェクトは自動的に差し替わるんだ。sb1がsbを上書きするような感じだね。これは気持ち的にはsbはHelloなんだからHello,Worldを返せよって思うわ。こういうのが副作用の一例か。なるほどなぁ...