Se la dichiarazione per più scenari

Sto lottando per completare questa affermazione. Ci deve essere un modo più semplice per passare attraverso tutte le combinazioni perché questa non può essere una buona pratica.

if( one == true && two == true && three == true ...) else if( one != true && two == true && three == true ...) 

Mi chiedo se voglio passare attraverso tutte le combinazioni c’è qualche altro modo per farlo, piuttosto che duplicare l’espressione?

Un modo sarebbe convertire i tuoi valori one , two e three in un singolo int con i bit impostati correttamente, e usando un’istruzione switch su maschere binarie, come questa:

 int combined=0; // Construct a binary representation using your Boolean values as bits: // Value of one goes to bit zero if (one) combined |= (1 << 0); // Value of one goes to bit one if (two) combined |= (1 << 1); // Value of three goes to bit two if (three) combined |= (1 << 2); switch (combined) { case 0: // All false break; case 1: // one is true, other are all false break; ... case 7: // All true break; } 

Tutte e otto le combinazioni sono ora codificate come valori interi:

 int three two one _-- ----- --- --- 0 - 0 0 0 1 - 0 0 1 2 - 0 1 0 3 - 0 1 1 4 - 1 0 0 5 - 1 0 1 6 - 1 1 0 7 - 1 1 1 

Va da sé che è necessario commentare pesantemente il codice come questo per i lettori del proprio codice che non hanno memorizzato rappresentazioni binarie di piccoli numeri.

Potresti fare qualcosa come:

 int i = (one ? 1 : 0) | (two ? 2 : 0) | (three ? 4 : 0); switch(i) { case 0: // ... case 1: // ... case 7: // ... } 

Questo sarà molto veloce – sarà un salto diretto ( lo switch opcode ), e le espressioni saranno valutate solo una volta ciascuna.

Non ne hai bisogno one != true sulla seconda riga, dal momento che hai già eliminato il caso in cui tutti sono vere. Puoi semplificare usando quello:

 if (one && two && three) { } else if (one && two) { } else if (two && three) { } else if (one && three) { } else if (one) { } else if (two) { } else if (three) { } else { // none true } 

Forse potresti provare questo:

 if (one && two && three) { // Do something } else if(one && two && three ...) { // Do Something else } 

per controllare una falsa affermazione usa ‘!’:

 if (!one && two ...) 

Il modo migliore per farlo è quello di dichiarare come bool ciascuno di quegli oggetti. In questo modo, puoi eliminare tutto == ? linee e avere qualcosa di simile a questo:

 bool one = true; // Random decision to call it true, just for testing bool two = false; bool three = true; if(one && two && three) // Do something else if(!one && two && three) // Do something else.