わさび唐辛子

いざという時のための備忘録

【Scala】遅延評価

遅延評価させるとどのようになるのかを確認。

 

普通に関数を実行してみる。

var i = 1
def main(args: Array[String]) {
    val execFunc = {
        println(i + ".Execute!!!")
        i = i + 1
    }
    
    // iの値を確認
    println("iの値は" + i)
    i = i + 1
    
    // 実行
    execFunc
    // iの値を確認
    println("iの値は" + i)
}

 

結果は、

1.Execute!!!
iの値は2
iの値は3

 

次に遅延評価で実行。

var i = 1
def main(args: Array[String]) {
    lazy val execFunc = {
        println(i + ".Execute!!!")
        i = i + 1
    }

    // iの値を確認
    println("iの値は" + i)
    i = i + 1

    // 実行
    execFunc
    // iの値を確認
    println("iの値は" + i)
}

 

結果は、

iの値は1
2.Execute!!!
iの値は3

普通に実行する時はexecFuncが宣言されるタイミングで関数自体が処理される。

関数を遅延評価させるとexecFuncは実行時に初めて処理(=評価)される。

 

これができることによって何が嬉しいかはまた後日。。。

広告を非表示にする