È una cattiva pratica creare blocchi di codice?

12

In C ++, è una cattiva pratica creare blocchi di codice all'interno di una funzione, come la seguente:

    bool f()
    {
       {
           double test = 0;

           test = // some other variable outside this function, for example.

           if (test == // some value)
             return true;
       }

       {
           double test = 0;

           test = // some variable outside this function, different from the last one.

           if (test == // some value)
             return true;
       }

       return false;

    }

Il punto per farlo sarebbe utilizzare più volte lo stesso nome variabile di "test", per lo stesso tipo di procedura. Nel mio progetto attuale, ho più variabili e sto eseguendo test multipli. Non voglio continuare a creare nuove variabili con nomi diversi per ciascuno dei test, considerando come i test siano così simili.

È una cattiva pratica inserire blocchi di codice in modo che le variabili escano dallo scope dopo ogni test, e quindi posso usare di nuovo i loro nomi? O dovrei cercare un'altra soluzione? Va notato che ho considerato di utilizzare lo stesso set di variabili per tutti i miei test (e di averli impostati tutti a 0 dopo ogni test era finito), ma avevo l'impressione che questa potesse essere una cattiva pratica.

    
posta Inertial Ignorance 02.11.2017 - 03:09
fonte

2 risposte

22

I blocchi sono perfettamente ragionevoli se li stai utilizzando per esplorare alcune risorse. File, connessioni di rete, allocazioni di memoria, transazioni di database, qualunque cosa. In questi casi, il blocco è in realtà parte della struttura logica del codice: si genera una risorsa, esiste per un certo periodo di tempo e poi si spegne in un momento prestabilito.

Ma se tutto quello che stai facendo è definire un nome , allora direi che sono cattive pratiche. In generale, naturalmente; circostanze speciali possono essere applicate.

Ad esempio, se questa funzione è stata generata da un sistema di generazione di codice, da un framework di test o simili, i blocchi per il controllo del nome sono una cosa ragionevole. Ma staresti parlando di codice scritto per lo scopo di una macchina, non di un umano.

Se un essere umano sta scrivendo un codice in cui è necessario riutilizzare i nomi all'interno della stessa funzione, direi che questi blocchi probabilmente devono essere funzioni separate. Soprattutto se quei nomi vengono utilizzati con tipi e / o significati diversi all'interno di quei blocchi.

    
risposta data 02.11.2017 - 04:48
fonte
10

Non è una cattiva pratica creare blocchi come questo. È come funzionano gli obiettivi.

Di solito questo avviene quando si usa RAII (l'acquisizione delle risorse è inizializzazione) e si desidera controllare quando i distruttori vengono richiamati.

Se ci vorrà molto, prenderei in considerazione la possibilità di spostare quel codice nella sua funzione.

A mio parere, usarlo per riciclare nomi variabili non è una buona idea. Ma posso vedere che è stato utile nei casi con poca memoria

    
risposta data 02.11.2017 - 03:35
fonte