Order of Operations Annoyance [duplicato]

0

Nella maggior parte dei linguaggi di programmazione ( C # , JavaScript , Java ) l'ordine di precedenza delle operazioni ha che il confronto di uguaglianza viene PRIMA dei confronti bit a bit.

Questo significa che se hai una operazione bit e un confronto di uguaglianza sulla stessa linea (come in questo codice javascript):

if(2 & 15 === 2){
    //do something
}

Si otterrà un risultato imprevisto (viene valutato a 0 in JavaScript). C # genera un errore se si tenta di farlo e non verrà compilato. Java, presumibilmente, genera anche un errore (non è stato attivato per il controllo).

Mi sembra che gli errori e la confusione in JavaScript possano essere rimossi completamente semplicemente mettendo gli operatori di uguaglianza su una precedenza inferiore rispetto agli operatori di Bitwise.

Non riesco a pensare a un'istanza in cui voglio avere sia un'operazione bit per bit che un'eguaglianza sulla stessa linea E voglio che l'uguaglianza sia valutata per prima.

Eppure ogni linguaggio di programmazione che ho controllato condivide lo stesso ordine di operazioni.

Qual è la ragione di questo? C'è un uso comune, legittimo, che mi manca che rende più semplice avere la precedenza come progettato?

    
posta Clever Human 10.10.2014 - 17:25
fonte

1 risposta

3

Legacy,

Un tempo in C gli operatori logici non a corto circuito erano gli unici disponibili e quindi era logico che si trovassero dopo l'uguaglianza.

Successivamente sono stati creati i cortocircuiti e la vecchia regola di precedenza non è mai stata modificata in nome della compatibilità con le versioni precedenti.

    
risposta data 10.10.2014 - 17:38
fonte

Leggi altre domande sui tag