Является ли тернарный оператор примером ленивой оценки? Если мы предположим фрагмент кода, например: Variable = Condition ? функция1(параметр): функция2(параметр); Может ли это быть примером ленивой оценки?
Тернарный оператор и ленивые вычисления
Ответы (1)
В большинстве языков - да, вычисляется лениво. Однако это не обязательно ситуация. Из Википедии:
Обратите внимание, что некоторые языки могут оценивать «оба» истинное и ложное выражения, даже если переменной будет присвоено только одно или другое. Это означает, что если true- или false-выражение содержит вызов функции, эта функция может быть вызвана и выполнена (вызывая любые связанные побочные эффекты из-за выполнения функции), независимо от того, будет ли использоваться ее результат.
Например, в Delphi вычисляется не лениво:
Однако, в отличие от истинного тернарного оператора, оба результата оцениваются до выполнения сравнения. Например, если одним из результатов является вызов функции, которая вставляет строку в таблицу базы данных, эта функция будет вызываться независимо от того, выполняется ли условие для возврата этого конкретного результата.