斯卡拉 |懒惰的评价
惰性求值或按需调用是一种求值策略,其中直到第一次使用表达式才求值,即将求值推迟到需要时。 Haskell等函数式编程语言广泛使用这种策略。 C、C++被称为严格的语言,它们在声明表达式后立即对其进行评估。然后有像 Scala 这样的语言,默认情况下是严格的,但如果明确指定,即混合类型,则可能是惰性的。
让我们看一个 Scala 中的示例:
没有懒惰:
val geeks = List(1, 2, 3, 4, 5)
val output = geeks.map(l=> l*2)
println(output)
只要对它应用操作,就会计算输出值。
懒惰:
val geeks = List(1, 2, 3, 4, 5)
lazy val output2 = geeks.map(l=> l*5)
println(output2)
直到我们使用 output2 才计算该值,直到println(output2)。
为什么是懒惰的评价?
在示例中,如果我们从不使用输出值怎么办?我们浪费了映射操作(CPU 计算),当我们编写更复杂和更大的代码时,这可能会非常昂贵。在这里,惰性求值通过仅在需要时才对表达式求值并避免不必要的开销来帮助我们优化过程。
优点:
- 优化计算过程。 Spark 是一个大数据计算引擎,其核心就是使用这种技术。
- 惰性求值可以帮助我们解决循环依赖。
- 提供对无限数据结构的访问。
- 允许将代码模块化成部分。
- 程序员失去了对其代码执行顺序的控制,因为一些表达式被求值,而另一些则不取决于需要。
缺点:
- 由于程序员无法控制程序的执行,因此查找错误可能很棘手。
- 由于必须存储所有指令(操作),因此会增加空间复杂度。
- 与传统方法相比,更难编码。