Domanda

Perché è cattiva pratica di dichiarare le variabili sulla linea?

ad es.

private String var1, var2, var3

invece di:

private String var1;
private String var2;
private String var3;
È stato utile?

Soluzione

Penso che ci siano vari motivi, ma tutti bollire fino a che il primo è meno leggibile e più incline al fallimento, perché una singola linea è fare più di una cosa.

E tutto ciò che per nessun guadagno reale, e non mi dici di trovare due righe di spazio risparmiato è un reale guadagno.

E ' una cosa simile a quello che succede quando si hanno

if ((foo = some_function()) == 0) {
    //do something
}

Ovviamente questo esempio è molto peggio del tuo.

Altri suggerimenti

A mio parere, l'obiettivo principale di ogni variabile su una riga separata sarebbe quello di facilitare il lavoro di strumenti di Controllo di Versione.

Se diverse variabili sono sulla stessa linea c'è il rischio che i conflitti estranei modifiche da diversi sviluppatori.

In C++ :

int * i, j;

mi è di tipo int *, j è di tipo int.La distinzione è troppo facile perdere.

Oltre ad avere loro su un'unica riga rende più facile per aggiungere alcuni commenti in un secondo momento

In C/C++, hai anche il problema che il * usato per indicare un tipo di puntatore si applica solo per l'direttamente identificatore seguente.Così un errore piuttosto comune di inesperienza degli sviluppatori è quello di scrivere

int* var1, var2, var3;

e in attesa di tutte e tre le variabili di tipo 'int puntatore', mentre per il compilatore di questa legge come

int* var1;
int var2;
int var3;

facendo solo var1 un puntatore.

Con linee separate, si ha la possibilità di aggiungere un commento su ogni riga descrive l'utilizzo della variabile (se non è chiaro il suo nome).

Perché in alcune lingue, var2 e var3 nel tuo esempio sarebbe non essere stringhe, sarebbero varianti (non tipizzati).

Il motivo è che la cattiva pratica?Io non credo che il tuo codice è ancora leggibile.

//not much use
int i, j, k;

//better
int counter, 
    childCounter, 
    percentComplete;

Per essere onesti, io non sono contro di essa.Penso che il suo perfettamente fattibile gruppo di variabili simili sulla stessa linea, ad es.

float fMin, fMax;

tuttavia ho steer chiaro quando le variabili non sono correlate ad es.

int iBalance, iColor;

La rilevanza.

Solo perché due variabili sono di tipo Stringa non significa che essi sono strettamente correlati gli uni agli altri.

Se i due (o più) variabili sono strettamente correlati dalla funzione, quindi, più che il tipo di variabile, quindi forse potrebbe essere dichiarato insieme.cioèsolo se ha un senso per un lettore del vostro programma per vedere le due variabili insieme dovrebbero effettivamente essere messi insieme

Ecco le mie ragioni:

  • Leggibilità, più facili da individuare se si sa che c'è solo uno su ogni linea
  • Il controllo di versione, meno intra-line modifiche, più a linea singola aggiunte, modifiche o cancellazioni, più facile l'unione da un ramo all'altro

Che cosa circa il caso ad esempio:

public static final int NORTH = 0,
                        EAST = 1,
                        SOUTH = 2,
                        WEST = 3;

È considerato cattiva pratica?Vorrei prendere in considerazione che va bene come contatori di alcuni dei punti precedentemente fatto:

  • si sarebbe sicuramente essere dello stesso tipo (nel mio staticamente tipizzato Java-mondo)
  • i commenti possono essere aggiunti per ogni
  • se è necessario modificare il tipo per uno, probabilmente non è per tutti, e tutti e quattro può essere fatto in un cambiamento

Così, in un (seppur odorosi di codice), ad esempio, c'è ragioni non puoi non farlo?

D'accordo con edg, e anche perché è più leggibile e facile per la manutenzione di ogni variabile sulla linea separata.Si vede subito il tipo, la portata e gli altri modificatori e quando si cambia un modificatore si applica solo alla variabile che si desidera - che evita errori.

  1. per essere più evidente quando si utilizzano strumenti di Controllo di Versione (coperto da Michel)
  2. per essere più leggibile quando si dispone di più semplice di overflow/underflow o un errore di compilazione e i vostri occhi non è riuscito a sottolineare l'ovvio
  3. per difendere l'opposto (cioèmulti-variabile riga singola dichiarazione) ha meno pro ("codice testuale visibilità verticale" essere un singleton)

È una cattiva pratica, soprattutto quando si può e si desidera inizializzare le variabili in decelerazione.Un esempio in cui questo potrebbe non essere così male è:

string a,b;
if (Foo())
{
  a = "Something";
  b = "Something else";
}
else
{
  a = "Some other thing";
  b = "Out of examples";
}

In generale si, per il controllo di versione e commenti motivi discussi da altri, e mi piacerebbe applicare che il 95% di tutti i casi.tuttavia, ci sono circostanze in cui ha senso, per esempio, se io sto codifica grafica e voglio un paio di variabili per rappresentare le coordinate della texture (sempre riferimento, per convenzione, come s e t), allora la dichiarazione di essi, come

int s, t;// le coordinate della texture

IMHO migliora la leggibilità del codice, sia riducendo il codice e facendo esplicito che queste due variabili appartengono insieme (naturalmente alcuni sostengono che per l'utilizzo di un singolo punto di una variabile di classe, in questo caso).

durante il tentativo a questa domanda https://www.interviewbit.com/problems/remove-element-from-array/

Metodo 1 consente Memoria superato il Limite per questo codice:

Tipo 1:

int i,j;

Tipo 2:

int i;
int j;

tipo 1:Consente Memoria Superato Il Limite Di

int removeElement  (int* A, int n1, int B) 
{
    int k=0, i;
    for(i=0;i<n1;i++)
        if(A[i]!=B)
        {
            A[k]=A[i];
            k++;
        }    
    return k;
}

Mentre il tipo 2 funziona perfettamente bene

int removeElement  (int* A, int n1, int B) 
{
    int k=0;
    int i;
    for(i=0;i<n1;i++)
        if(A[i]!=B)
        {
            A[k]=A[i];
            k++;
        }    
    return k;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top