Вопросы, относящиеся: Benefits of using short-circuit evaluation, Why would a language NOT use Short-circuit evaluation?, Can someone explain this line of code please? (Logic & Assignment operators)Зачем использовать код короткого замыкания?
Есть вопросы о преимуществах языка с использованием кода короткого замыкания, но мне интересно, какие преимущества для программиста? Это просто, что он может сделать код немного более кратким? Или есть причины для повышения производительности?
Я не спрашиваю о ситуациях, когда необходимо оценить так или иначе два объекта, например:
if($user->auth() AND $model->valid()){
$model->save();
}
мне рассуждения там понятно - так как нужно, чтобы быть правдой, вы можете пропустить больше дорогостоящая проверка модели, если пользователь не может сохранить данные.
Это также имеет (для меня) очевидную цель:
if(is_string($userid) AND strlen($userid) > 10){
//do something
};
Потому что это было бы неразумно называть strlen()
со значением нестроковой.
Что мне интересно, так это использование кода короткого замыкания, когда оно не влияет на другие заявления. Например, на странице Zend указательным приложений по умолчанию:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Это могло бы быть:
if(!defined('APPLICATION_PATH')){
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
}
Или даже как одно утверждение:
if(!defined('APPLICATION_PATH'))
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Так почему использовать кратко- код цепи? Только для коэффициента «прохлады» использования логических операторов вместо структур управления? Чтобы консолидировать вложенные операторы if? Потому что это быстрее?
Одна заметка о скорости: если у вас есть полупристойный компилятор, он будет генерировать один и тот же машинный код для операторов и коротких замыканий. Если вы этого не сделаете, это приведет к созданию достаточно плохого кода, что в шуме будет потеряно несколько дополнительных циклов от некоторой микрооптимизации исходного уровня. Очень просто, это не важно. –
@David Это верно и для языков сценариев? –
@TimLytle в интерпретируемых языках вы можете иметь разные типы поведения из-за различного анализа и интерпретации. Компиляторы извлекают выгоду из того, что нужно сделать до того, как у кода появится возможность запуска. –