Тернарный оператор и ленивые вычисления

Является ли тернарный оператор примером ленивой оценки? Если мы предположим фрагмент кода, например: Variable = Condition ? функция1(параметр): функция2(параметр); Может ли это быть примером ленивой оценки?


person Swapnil B.    schedule 08.07.2015    source источник


Ответы (1)


В большинстве языков - да, вычисляется лениво. Однако это не обязательно ситуация. Из Википедии:

Обратите внимание, что некоторые языки могут оценивать «оба» истинное и ложное выражения, даже если переменной будет присвоено только одно или другое. Это означает, что если true- или false-выражение содержит вызов функции, эта функция может быть вызвана и выполнена (вызывая любые связанные побочные эффекты из-за выполнения функции), независимо от того, будет ли использоваться ее результат.

Например, в Delphi вычисляется не лениво:

Однако, в отличие от истинного тернарного оператора, оба результата оцениваются до выполнения сравнения. Например, если одним из результатов является вызов функции, которая вставляет строку в таблицу базы данных, эта функция будет вызываться независимо от того, выполняется ли условие для возврата этого конкретного результата.

person MaMazav    schedule 08.07.2015