Come si nota, le parole che si cercano sono non "cortocircuito". La valutazione di cortocircuito significa che nell'espressione
e1 || e2
se l'espressione e1
viene valutata a qualcosa che rappresenta la verità, quindi non è necessario valutare e2
. Sia C che Perl utilizzano la valutazione di cortocircuito.
Sono consapevole della distinzione che si ottiene in due diversi sapori di cortocircuito O, ma in venti anni di lavoro in linguaggi di programmazione non ho mai visto queste cose nominate. La versione Perl è abbastanza popolare nelle lingue dinamiche, ad esempio Icon, Lua, Scheme.
La versione Perl è quasi esprimibili in C:
e1 ? e1 : e2
Purtroppo questa versione può valutare e1
due volte, a seconda del ottimizzatore — e se e1
ha effetti collaterali, o se il compilatore non può dire se lo potrebbe avere effetti collaterali, allora il compilatore è richiesto per valutarlo due volte. Questo difetto può essere risolto legando il valore di e1
a una nuova variabile locale, ma richiede un'estensione GNU.
Il comportamento C può essere emulato in Perl da
!!(e1 || e2)
fonte
2010-01-31 18:53:47
Un termine comune per due operazioni che hanno effetti diversi? Non è come chiedere se esiste un termine comune per mele e arance? Sembra un po 'contraddittorio. – jalf
@Jalf: Sta chiedendo un termine _common per questi due tipi di ** valutazione ** _, la risposta non dovrebbe essere "Valutazione del cortocircuito"? –
Non ne sono sicuro. La valutazione del cortocircuito è la caratteristica a cui è interessato? Potrebbe anche essere "logico" o "int-to-bool conversion". Le due righe di codice hanno molto in comune, ma ci sono anche alcune importanti differenze. Non sono proprio sicuro di quale OP desideri un termine comune * per * – jalf