Almeno poiché la domanda è stata inizialmente posta, i due non sono equivalenti.
Nel primo, something_a
viene eseguito solo se a
è vero o se b
è falso e c
è vero. I.e, if (a || (c && !b))
.
Nel secondo, something_a
viene eseguito se a
o c
è true (indipendentemente da b
). Solo se questi sono entrambi falsi consideriamo b
.
Pertanto, la prima domanda non dovrebbe essere più facile da mantenere, ma quale comportamento si desidera effettivamente.
Se le condizioni sono esclusive, in modo tale che la differenza non si presenti, allora considererei la relazione tra le condizioni, se ce ne sono. Se è fondamentalmente una coincidenza che due input producano lo stesso output, allora probabilmente li elenco ogni individuo, poiché è probabilmente più semplice mappare semplicemente dagli input ai risultati quando ciascuno è elencato direttamente. Il secondo diventa interessante soprattutto quando / se c'è una relazione abbastanza ovvia tra le condizioni.
Ad esempio, se hai qualcosa di simile:
if (customer has no ID || customer's age < minimum)
reject order for alcoholic beverage
In questo caso, abbiamo due diverse manifestazioni di ciò che è davvero una singola condizione: il cliente non può dimostrare di essere abbastanza vecchio da comprare la bevanda. Non sono (dal nostro punto di vista) due condizioni non correlate che portano allo stesso risultato - piuttosto, sono solo modi diversi di esprimere la stessa condizione, quindi ha più senso raggrupparle insieme.