Domande correlate: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)Perché utilizzare il codice di cortocircuito?
Ci sono domande circa i vantaggi di un linguaggio utilizzando il codice corto circuito, ma mi chiedo quali sono i vantaggi per un programmatore? È solo che può rendere il codice un po 'più conciso? O ci sono motivi di prestazioni?
Non sto chiedendo di situazioni in cui devono essere valutati in ogni caso due entità, per esempio:
if($user->auth() AND $model->valid()){
$model->save();
}
Per me il ragionamento non è chiaro - dal momento che entrambi hanno bisogno per essere vero, si può saltare più validazione del modello costoso se l'utente non può salvare i dati.
Questo ha anche un (a me) scopo evidente:
if(is_string($userid) AND strlen($userid) > 10){
//do something
};
Perché non sarebbe saggio per chiamare strlen()
con un valore non stringa.
Quello che mi chiedo è l'uso del codice di cortocircuito quando non influisce su altre dichiarazioni. Ad esempio, dalla pagina di indice di default di Zend Application:
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Questo avrebbe potuto essere:
if(!defined('APPLICATION_PATH')){
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
}
o addirittura come una singola istruzione:
if(!defined('APPLICATION_PATH'))
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Allora perché usare il breve codice del circuito? Solo per il fattore 'coolness' di utilizzare gli operatori logici al posto delle strutture di controllo? Consolidare le istruzioni nidificate if? Perché è più veloce?
Una nota sulla velocità: se si dispone di un compilatore a metà decente, verrà generato lo stesso codice macchina per istruzioni if e cortocircuiti. Se non lo fai, sta producendo codice sufficientemente cattivo che alcuni dei cicli aggiuntivi da una microottimizzazione di livello sorgente andranno persi nel rumore. Molto semplicemente, non è importante. –
@David Vale anche per i linguaggi di scripting? –
@TimLytle nelle lingue interpretate è possibile avere comportamenti diversi a causa di diverse analisi e interpretazione da eseguire. I compilatori ne traggono vantaggio prima che il codice abbia un'opportunità di esecuzione. –