Questo è corretto, l'operatore OR di cortocircuito (||) restituirà sempre lo stesso valore dell'operatore OR senza cortocircuito (|). (*)
Tuttavia, se il primo operando è true, l'operatore di cortocircuito non causerà la valutazione del secondo operando, mentre l'operatore senza cortocircuito causerà sempre la valutazione di entrambi gli operandi. Ciò può avere un impatto sulle prestazioni e, a volte, sugli effetti collaterali.
Quindi, c'è un uso per entrambi: se ti interessi per le prestazioni, e la valutazione del secondo operando non produce alcun effetto collaterale, (o se non ti interessa di loro), allora usa assolutamente il corto -circuito operatore. Ma se per qualche motivo hai bisogno degli effetti collaterali del secondo operando, allora dovresti usare l'operatore non a corto circuito.
Un esempio in cui dovresti usare l'operatore senza cortocircuito:
if( write_customer_to_database() != SUCCESS |
write_supplier_to_database() != SUCCESS |
write_order_to_database() != SUCCESS )
{
transaction_rollback();
}
(*) Tranne per alcuni scenari realmente perversi in cui la valutazione del primo operando su false causa per effetto collaterale il secondo operando da valutare su true invece che su false.