在大多数编程语言中,传递给函数的参数在函数使用它们之前被评估,也就是说,它们被急切地评估。
对我来说,似乎只有在函数使用它们时才评估参数更有意义,也就是说,懒惰。这对我来说更有意义,因为它似乎具有性能优势:为什么要评估甚至从来不需要的东西?
此外,假设您想实现一个 if
接受一个 bool 值的函数,如果 bool 值为真则返回一个对象,如果 bool 值为假则返回另一个对象:
object if(bool condition, object valueIfTrue, object valueIfFalse) {
if(condition) return valueIfTrue;
return valueIfFalse;
}
在急切地评估参数的语言中,即使函数总是只需要其中一个对象,也总是会评估两个对象,这充其量会产生轻微的不必要的开销,最坏的情况会导致无限循环。
也就是说,由于大多数编程语言都使用对函数参数的急切求值,我认为通常这样做肯定是有原因的。我忽略了这里的急切评估有什么很大的好处,仅仅是因为以这种方式实现语言更容易,这只是传统,还是什么?
最佳答案
我已经看到了急切评估的几个原因,这两个都很重要:
惰性评估可以是一个强大的工具,但它并非没有代价。纯函数式语言倾向于避免问题 #1,因为它们没有副作用(通常),但有时仍会被问题 #2 咬住。允许延迟求值的语言(LISP 宏是这种形式的一种形式,虽然与惰性求值不同)可以两全其美,但代价是程序员付出了更多的努力。
关于language-agnostic - 为什么大多数编程语言对传递给函数的参数使用预先求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8797980/