Любая разница между оценкой Lazy и оценкой короткого замыкания? - программирование
Подтвердить что ты не робот

Любая разница между оценкой Lazy и оценкой короткого замыкания?

Из Википедии:

ленивая оценка:

В теории языка программирования ленивая оценка или позывной стратегия оценки, которая задерживает оценку выражения пока его значение не понадобится

Оценка короткого замыкания:

Оценка короткого замыкания, минимальная оценка или оценка Маккарти обозначает семантику некоторых булевых операторов в некотором программировании языки, в которых второй аргумент выполняется только или оценивается если первого аргумента недостаточно, чтобы определить значение Выражение

Так какая разница между ними, например, когда у меня есть:

if(false && true && true) {
    //boo
} 

Насколько я знаю, компилятор не выполняет выражения после false, потому что у меня есть &&, поэтому все выражение будет false наконец. (справа?)

Итак, это поведение называется Lazy оценка или Оценка короткого замыкания?

4b9b3361

Ответ 1

Различие заключается в том, что в случае ленивой оценки выражение оценивается только тогда, когда оно необходимо, тогда как в случае оценки короткого замыкания оценка выражения останавливается сразу после того, как вы знаете результат. Это своего рода ортогональные понятия.

Ленивая оценка может быть применена к любым вычислениям (схема короткого замыкания обычно используется только с bools). Он не отключает бесполезные вычисления, но задерживает все вычисления до тех пор, пока не потребуется его результат.

variable = bigAndSlowFunc() or evenSlowerFnc()
if (carry out heavy computations)
  print "Here it is: ", variable
else
  print "As you wish :-)"

Если оценка ленива, variable будет вычисляться, только если мы перейдем в первую ветвь (then) if, иначе она не будет. На этапе оценки (когда мы готовим аргументы для print) схему короткого замыкания можно использовать, чтобы решить, нужно ли нам называть evenSlowerFnc.

Итак, в вашем примере это оценка короткого замыкания, так как без задержки вычислений не происходит.