Ho una lunga (ish) funzione del seguente modello:
bool func(some_type_t *p1, another_t *p2)
{
bool a = false, b = false, c = false, etc = false;
a = (some_long && expression && \
(that_deserves | its_own_line));
b = (another || long_expression && \
(that_deserves | its_own_line));
c = and_so && on;
return a && b && c && etc;
}
Come puoi vedere, il valore restituito è true
se e solo se tutti i flag sono veri. Quindi posso tornare non appena uno di questi risulta essere false
. Potrebbe essere o non essere più ottimale della versione attuale, ma voglio farlo per soddisfare il mio OCPD . Ho pensato di mettere tutto in do{}while(0);
e scoppiare su false
, ma sembra strano (e ricordo di aver visto qualcosa del genere in tdwtf).
Non voglio più dichiarazioni di ritorno o blocchi profondamente annidati, e di certo non voglio compromettere la leggibilità con un enorme se si basa sul cortocircuito. Posso vivere con goto
in questo caso, ma voglio sapere se ci sono altri modelli / costrutti usati in scenari simili.