En la mayoría de los lenguajes de programación, los argumentos pasados a una función se evalúan antes de la función los usa, es decir, se evalúan con entusiasmo.¿Por qué la mayoría de los lenguajes de programación utilizan una evaluación entusiasta para los argumentos pasados a una función?
Para mí, parece que tendría mucho más sentido evaluar los argumentos solo una vez que la función los usa, es decir, de forma perezosa. Esto tiene más sentido para mí porque parece que tendría un beneficio en el rendimiento: ¿por qué evaluar cosas que ni siquiera son necesarias?
Además, suponga que desea implementar una función de if
que acepte un valor lógico, y un objeto para volver si el booleana es verdadera, y otro objeto para volver si el booleano es falso:
object if(bool condition, object valueIfTrue, object valueIfFalse) {
if(condition) return valueIfTrue;
return valueIfFalse;
}
En una lenguaje que evalúa con entusiasmo los argumentos, ambos objetos siempre se evalúan aunque la función siempre solo necesite uno de ellos, que, en el mejor de los casos, incurre en una ligera sobrecarga innecesaria y, en el peor de los casos, causa un ciclo infinito.
Dicho esto, dado que la mayoría de los lenguajes de programación utilizan una evaluación entusiasta de los argumentos de la función, supongo que debe haber una razón por la que generalmente se hace de esa manera. ¿Hay algún beneficio grande de la evaluación entusiasta que estoy pasando por alto, es simplemente porque era más fácil implementar los lenguajes de esa manera, es solo tradición, o qué?
Porque es fácil compilar/interpretar código en esos lenguajes no perezosos. –