読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

lazyで値を遅延評価する

Scala

「val」で不変の値を定義する際に、「lazy」修飾子をつけると、値が遅延評価される(最初にアクセスされたときにのみ評価され、定義時には評価されない)ようになります。

  • 「lazy」は「val」にのみ設定できます。「var」や「def」に設定することはできません。
  • 値の評価は「最初にアクセスされたときに1回のみ」行なわれます。
    • 複数回呼び出した場合、2回目以降は値の評価は行なわれず、初回の評価結果が返されます。
    • ここが「def」と違うところですね。「def」でも値は遅延評価になりますが、値の評価は参照時に毎回行なわれます。
// lazyをつけると、値の評価が初回アクセス時にのみ行われるようになる。
lazy val a = { println("eval a"); "a" }

// var や def には適用できない。 // 以下はコンパイルエラー 
// lazy var b = { "b" } 
// lazy def c = { "c" }

println( "-- before --" )
println( a ) // 初回の参照。このとき初めてaの値が評価され、"eval a"と"a"が表示される。
println( a ) // 2回目以降は値の評価は行われない。"a"の表示される。

実行結果です。

-- before --
eval a
a
a