Pergunta

Por que é má prática para variáveis ??de declaração em uma linha?

por exemplo.

private String var1, var2, var3

em vez de:

private String var1;
private String var2;
private String var3;
Foi útil?

Solução

Eu acho que existem várias razões, mas todos eles se resumem a que o primeiro é apenas menos legível e mais propensos a falhas, porque uma única linha está fazendo mais de uma coisa.

E tudo isso para nenhum ganho real, e que você não me diga que você encontrar duas linhas de espaço poupado é um ganho real.

É uma coisa semelhante ao que acontece quando você tem

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

É claro que este exemplo é muito pior do que o seu.

Outras dicas

Na minha opinião, o principal objetivo de ter cada variável em uma linha separada seria facilitar o trabalho de ferramentas de controle de versão.

Se várias variáveis ??estão na mesma linha o risco de ter conflitos para modificações não relacionados por diferentes desenvolvedores.

Em C ++:

int * i, j;

i é do tipo int *, j é do tipo int. A distinção é muito facilmente perdidas.

Além de ter-los em uma linha cada torna mais fácil de acrescentar alguns comentários mais tarde

Em C / C ++, você também tem o problema que o * usado para indicar um tipo de ponteiro só se aplica ao seguinte directamente identificador. Portanto, um erro bastante comum de desenvolvedores inexperientes é escrever

int* var1, var2, var3;

e esperar que todas as três variáveis ??para ser do tipo 'ponteiro int', enquanto que para o compilador este lê como

int* var1;
int var2;
int var3;

fazendo apenas var1 um ponteiro.

Com linhas separadas, você tem a oportunidade de adicionar um comentário em cada linha descrevendo o uso da variável (se não está claro a partir de seu nome).

Porque em alguns idiomas, var2 e var3 no seu exemplo seria não ser cordas, eles seriam variantes (sem tipo).

Por que é que uma má prática? Eu não acho que ele é, enquanto o seu código ainda é legível.

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

//better
int counter, 
    childCounter, 
    percentComplete;

Para ser honesto eu não sou contra isso. Eu acho que seus perfeitamente viável para agrupar variáveis ??semelhantes na mesma linha por exemplo.

flutuador fMin, fMax;

No entanto I orientar clara quando as variáveis ??não estão relacionadas por exemplo.

int iBalance, iColor;

Relevância.

Só porque duas variáveis ??são do tipo String não significa que eles estão intimamente relacionados entre si.

Se as variáveis ??dois (ou mais) estão intimamente relacionados por função, tipo em vez de variável, então talvez eles poderiam ser declarados junto. isto é, apenas se faz sentido para um leitor do seu programa para ver as duas variáveis ??em conjunto eles devem realmente ser colocados juntos

Eis as minhas razões:

  • Readability, mais fácil de detectar se você sabe que há apenas um em cada linha
  • O controle de versão, menos mudanças intra-line, mais adições de linha única, alterações ou supressões, mais fácil de merge de um galho para outro

O que sobre o caso, tais como:

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

Isso é considerado uma má prática também? Gostaria de considerar que tudo bem, uma vez que contraria alguns dos pontos feitos anteriormente:

  • todos iriam definitivamente ser do mesmo tipo (em minha Java mundial de tipagem estática)
  • Comentários podem ser adicionados para cada
  • se você tiver que alterar o tipo para um, você provavelmente tem que fazer isso para todos, e todos os quatro pode ser feito em uma mudança

Assim, em um exemplo (embora código de mau cheiro), há razões que você não faria isso?

Concordo com edg, e também porque é mais legível e de fácil manutenção para que cada variável na linha separada. Você vê imediatamente o tipo, âmbito e outros modificadores e quando você muda um modificador se aplica apenas à variável que você quer -. Que os erros Evita

  1. a ser mais evidente para você ao usar ferramentas de controle de versão (coberto por Michel)
  2. para ser mais legível para você quando você tem o mais simples estouro / estouro negativo ou erro de compilação e seus olhos não conseguiram apontar o óbvio
  3. para defender o contrário (ou seja, a declaração de uma única linha multi-variável) tem menos prós ( "código de visibilidade vertical Prova" ser um singleton)

É uma prática ruim principalmente quando você pode e quer inicializar variáveis ??na desaceleração. Um exemplo onde isso pode não ser tão ruim é:

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

Geralmente é, para o controle de versão e razões comentando discutido por outros, e eu aplicar isso em 95% de todos os casos. no entanto, existem circunstâncias em que faz sentido, por exemplo, se eu estou codificação de vídeo e eu quero um par de variáveis ??para representar coordenadas de textura (sempre referenciados por convenção como s e t) então a declará-los como

int s, t; // textura coordenadas

IMHO melhora a legibilidade do código tanto, encurtando o código e tornando explícito que essas duas variáveis ??pertencem juntos (obviamente alguns diriam para usar uma variável de classe único ponto neste caso).

ao tentar esta pergunta https://www.interviewbit.com/ problemas / Remove-elemento-de-gama /

Método 1 dá Limite de memória excedido para este código:

Tipo 1:

int i,j;

Tipo 2:

int i;
int j;

Tipo 1: Dá Limite de memória excedido

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;
}

Considerando tipo 2 funciona perfeitamente bem

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top