Fare due cose su una riga è sempre una cattiva pratica?

6
int *itPins = pins;
for(int i = 0; i < count; i++)
{
    ConfigureGpifPinAsGpioOutput(itPins);
    itPins++;
}

Ho l'impressione che fare due cose in una riga sia una cattiva pratica. Questo è il motivo per cui sto facendo avanzare l'iteratore al di fuori dell'unica affermazione, usandola. Tuttavia, mi sento ciecamente seguendo una regola.

  • Questo codice è meno soggetto a errori se il ++ è all'interno del richiamo della funzione?
  • Perché?
  • Questa regola si applica a casi estremamente semplici o è significativa solo per strutture di programma più complesse?
posta Vorac 13.12.2013 - 10:02
fonte

3 risposte

26

Non è sempre una cattiva pratica fare più cose su una sola riga, ma ha un rischio più elevato di rendere il programma più complicato che deve essere.

Se fossi pedante, potrei obiettare che nella riga for(int i = 0; i < count; i++) , stai anche facendo più cose, ma pochissime persone contrassegnerebbero quella linea come una violazione della regola.

D'altra parte, se avessi una riga come ConfigureGpifPinAsGpioOutput(itPins++); , allora l'incremento nell'argomento aumenta la complessità come dovrei guardare due volte per essere sicuro che il codice sia corretto e probabilmente lo contrassegnerei come inutilmente complicato.

Un altro modo per scrivere il ciclo è il seguente:

for(int i = 0; i < count; i++)
{
    ConfigureGpifPinAsGpioOutput(pins[i]);
}

dove ti libererai completamente del problema.

    
risposta data 13.12.2013 - 10:54
fonte
8

Dipende. La maggior parte delle volte vorrei evitare queste cose, ma in un caso semplice come questo

 ConfigureGpifPinAsGpioOutput(itPins++);

è molto idiomatico per la maggior parte dei programmatori con una certa esperienza nelle famiglie C dei linguaggi di programmazione. Con una certa esperienza nella lettura del codice C, è IMHO facile da comprendere rispetto alle due righe di codice nell'esempio.

Quindi non sarei troppo pignolo per questo caso speciale.

    
risposta data 13.12.2013 - 12:29
fonte
2

Questa è una questione di stile e non c'è una risposta definitiva. Ci sono alcuni programmatori C che sono più dogmatici e odieranno il codice con più istruzioni per riga. Quasi nessuno obietterà al codice in cui ogni affermazione è su una riga separata. Se ci sono persone nella tua squadra che odiano vedere più affermazioni su una linea, allora non farlo. Discuti su qualcosa di più importante. Se la squadra è solo te, allora preparati.

Nel tuo esempio specifico, la risposta migliore è eliminare i e iterare direttamente attraverso i numeri dei pin:

for(int* p = pins; p < pins + count; ++p) {
    ConfigureGpifPinAsGpioOutput(p);
}

A proposito, ci sono molti programmatori C che odieranno davvero le convenzioni di denominazione quasi ungherese.

    
risposta data 13.12.2013 - 19:33
fonte

Leggi altre domande sui tag