•Estratégia de avaliação que satisfaz ambas as propriedades abaixo: •A avaliação da expressão é atrasada até que o valor seja necessário (non-strict evaluation) •Avaliações repetidas são evitadas (sharing)
scala> lazy val x = { println("avaliou x"); "XXX" } x: java.lang.String = scala> lazy val y = { println("avaliou y"); "YYY" } y: java.lang.String = scala> if (true) x else y LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" } x: java.lang.String = scala> lazy val y = { println("avaliou y"); "YYY" } y: java.lang.String = scala> if (true) x else y avaliou x res0: java.lang.String = XXX LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" } x: java.lang.String = scala> lazy val y = { println("avaliou y"); "YYY" } y: java.lang.String = scala> if (true) x else y avaliou x res0: java.lang.String = XXX scala> if (true) x else y LAZY VALS
scala> lazy val x = { println("avaliou x"); "XXX" } x: java.lang.String = scala> lazy val y = { println("avaliou y"); "YYY" } y: java.lang.String = scala> if (true) x else y avaliou x res0: java.lang.String = XXX scala> if (true) x else y res1: java.lang.String = XXX LAZY VALS