Crea variabili booleane per ogni piccolo passaggio:
bool step1 = i + u == b || q >= a;
bool step2 = a != b && p.isGood() && group1;
bool step3 = group2 || k.isSomething() || m > n;
if (step3) { doSomething(); }
Questo è ovviamente simile alla risposta di Lacrymology, tranne che con nomi diversi per ogni passaggio.
Se nominate step1
, step2
e step3
in modi che hanno un buon senso concettuale, questo dovrebbe essere di gran lunga il più leggibile. p.isGood()
e a k.isSomething()
volte può essere invocato in situazioni in cui non sarebbe nel tuo codice originale, quindi questa non sarebbe un'opzione se quelle funzioni sono costose o se stai eseguendo questo codice in un ciclo molto stretto.
D'altra parte, non è necessario preoccuparsi dell'hit di prestazioni che potrebbe comportare la creazione di nuove variabili; un buon compilatore li ottimizzerà.
Un esempio con il rilevamento delle collisioni rettangolari (che probabilmente non useresti a causa del summenzionato hit delle prestazioni):
if((a.x + a.width >= b.x || b.x + b.width >= a.x)
&& (a.y + a.height >= b.y || b.y + b.width >= a.y)
)
{ collision(); }
Potrebbe diventare:
bool horizMatch = a.x + a.width >= b.x || b.x + b.width >= a.x;
bool vertMatch = a.y + a.height >= b.y || b.y + b.width >= a.y;
if(horizMatch && vertMatch) { collision(); }
Inoltre, se vuoi lasciare il tuo codice così com'è, penso che andrebbe anche bene. Sinceramente penso che il tuo codice sia abbastanza leggibile. Ovviamente non so cosa a b x y i u p k m n
siano esattamente , ma per quanto riguarda la struttura, mi sembra buono.