In primo luogo, alcuni background: Sono un insegnante di informatica IT e sto cercando di presentare gli operatori booleani di java alla mia classe di decima classe. Il mio insegnante-mentore ha esaminato un foglio di lavoro che ho preparato e ho commentato che avrei potuto lasciare che usassero solo un singolo & o | per indicare gli operatori, perché "fanno la stessa cosa".
Sono consapevole della differenza tra & e & & amp ;.
& è un operatore bit a bit destinato all'uso tra interi, per eseguire "bit-twiddling".
& & è un operatore condizionale destinato all'uso tra valori booleani.
Per dimostrare che questi operatori non sempre "fanno la stessa cosa", ho deciso di trovare un esempio in cui l'utilizzo del bit a bit tra valori booleani avrebbe comportato un errore. Ho trovato questo esempio
boolean bitwise;
boolean conditional;
int i=10, j=12;
bitwise = (i<j) | ((i=3) > 5); // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i<j) || (i=3) > 5 ; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
i=10;
bitwise = (i>j) & (i=3) > 5; // value of i after oper: 3
System.out.println(bitwise+ " "+ i);
i=10;
conditional = (i>j) && (i=3) > 5; // value of i after oper: 10
System.out.println(conditional+ " "+ i);
Questo esempio mostra che se un valore deve essere modificato dalla seconda metà dell'espressione, ciò comporterebbe una differenza tra i risultati, poiché bitwise è un operatore ansioso, mentre il condizionale si comporta come un corto circuito (non valutare la seconda metà, se la prima metà è falsa nel caso di & & e vera nel caso di ||).
Ho un problema con questo esempio. Perché dovresti voler cambiare un valore nello stesso momento in cui esegui una comparazione? Non sembra un modo robusto per codificare. Sono sempre stato contrario a fare più operazioni su una singola riga nel mio codice di produzione. Sembra che qualcosa di un "cowboy codificante" senza coscienza per quanto riguarda la manutenibilità del suo codice farebbe. So che in alcuni domini il codice deve essere il più compatto possibile, ma sicuramente questa è una cattiva pratica in generale?
Posso spiegare la mia scelta di incoraggiare l'uso di & & e || oltre & e | perché questo è un accettato convenzione di codifica nell'ingegneria del software .
Ma qualcuno potrebbe darmi un esempio migliore, anche reale, di usare un operatore bit a bit in un'espressione condizionale?