Preguntas relacionadas: 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)¿Por qué usar el código de cortocircuito?
Hay preguntas sobre los beneficios de una lengua utilizando el código de cortocircuito, pero me pregunto ¿cuáles son los beneficios para un programador? ¿Es solo que puede hacer que el código sea un poco más conciso? ¿O hay razones de rendimiento?
No estoy preguntando por situaciones en las dos entidades necesitan ser evaluados de todas formas, por ejemplo:
if($user->auth() AND $model->valid()){
$model->save();
}
Para mí, el razonamiento no está claro - ya que ambos necesitan para ser verdad, puede saltar más validación del modelo costoso si el usuario no puede guardar los datos.
Esto también tiene un (a mí) propósito obvio:
if(is_string($userid) AND strlen($userid) > 10){
//do something
};
Debido a que no sería prudente llamar strlen()
con un valor distinto de cadena.
Lo que me pregunto es sobre el uso del código de cortocircuito cuando no afecta a ninguna otra declaración. Por ejemplo, desde la página de índice predeterminado Zend Aplicación:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Esto podría haber sido:
if(!defined('APPLICATION_PATH')){
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
}
o incluso como una sola instrucción:
if(!defined('APPLICATION_PATH'))
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Así que ¿por qué utilizar a corto código de circuito? ¿Solo por el factor 'frialdad' de usar operadores lógicos en lugar de estructuras de control? Para consolidar declaraciones if anidadas? Porque es más rápido?
Una nota sobre la velocidad: si tiene un compilador medio decente, generará el mismo código de máquina para declaraciones y cortocircuitos. Si no lo hace, está produciendo un código lo suficientemente malo como para que algunos ciclos extra de alguna microoptimización a nivel de fuente se pierdan en el ruido. Muy simplemente, no es importante. –
@David ¿Eso también sería cierto para los lenguajes de scripting? –
@TimLytle en idiomas interpretados, puede tener diferentes comportamientos debido a los diferentes análisis e interpretaciones que se deben realizar. Los compiladores se benefician de eso antes de que el código tenga la oportunidad de ejecutarse. –