В большинстве языков программирования аргументы, передаваемые в функцию, оцениваются до , когда функция использует их, то есть они оцениваются с нетерпением.
Мне кажется, что было бы гораздо разумнее оценивать аргументы только тогда, когда функция их использует, то есть лениво. Это имеет больше смысла для меня, потому что кажется, что это принесет выигрыш в производительности: зачем оценивать вещи, которые даже не нужны?
Более того, предположим, что вы хотели реализовать функцию if
, которая принимает логическое значение, и объект, который должен возвращаться, если логическое значение истинно, и другой объект, который должен возвращаться, если логическое значение равно false:
object if(bool condition, object valueIfTrue, object valueIfFalse) {
if(condition) return valueIfTrue;
return valueIfFalse;
}
В языке, который охотно оценивает аргументы, оба объекта всегда оцениваются, даже если функция всегда будет нуждаться только в одном из них, что в лучшем случае приводит к небольшим ненужным накладным расходам и, в худшем случае, вызывает бесконечный цикл.
Тем не менее, поскольку большинство языков программирования используют тщательную оценку аргументов функций, я предполагаю, что должна быть причина, почему это обычно делается именно так. Есть ли здесь какое-то большое преимущество нетерпеливой оценки, которую я упускаю из виду, просто потому, что так проще было реализовать языки, это просто традиция или что?