Pregunta

¿Por qué es una mala práctica declarar variables en una línea?

p.ej.

private String var1, var2, var3

en lugar de:

private String var1;
private String var2;
private String var3;
¿Fue útil?

Solución

Creo que hay varias razones, pero todas se reducen a que la primera es menos legible y más propensa a fallar porque una sola línea hace más de una cosa.

Y todo eso sin ninguna ganancia real, y no me digas que dos líneas de espacio ahorrado son una ganancia real.

Es algo similar a lo que sucede cuando tienes

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

Por supuesto, este ejemplo es mucho peor que el tuyo.

Otros consejos

En mi opinión, el objetivo principal de tener cada variable en una línea separada sería facilitar el trabajo de las herramientas de Control de Versiones.

Si varias variables están en la misma línea, corre el riesgo de tener conflictos por modificaciones no relacionadas realizadas por diferentes desarrolladores.

En C++:

int * i, j;

i es de tipo int *, j es de tipo int.Es muy fácil pasar por alto la distinción.

Además de tenerlos en una línea, cada uno hace que sea más fácil agregar algunos comentarios más adelante.

En C/C++, también tiene el problema de que el * usado para indicar un tipo de puntero solo se aplica al identificador inmediatamente siguiente.Entonces, un error bastante común de los desarrolladores inexpertos es escribir

int* var1, var2, var3;

y esperando que las tres variables sean del tipo 'int pointer', mientras que para el compilador esto se lee como

int* var1;
int var2;
int var3;

haciendo solo var1 un puntero.

Con líneas separadas, tiene la oportunidad de agregar un comentario en cada línea que describa el uso de la variable (si no queda claro en su nombre).

Porque en algunos idiomas, var2 y var3 en su ejemplo serían no ser cadenas, serían variantes (sin tipo).

¿Por qué es esa mala práctica?No creo que lo sea, siempre y cuando su código aún sea legible.

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

//better
int counter, 
    childCounter, 
    percentComplete;

Para ser honesto, no estoy en contra.Creo que es perfectamente factible agrupar variables similares en la misma línea, p.

flotador fMín, fMáx;

sin embargo, me mantengo alejado cuando las variables no están relacionadas, p.

int iBalance, iColor;

Relevancia.

El hecho de que dos variables sean de tipo String no significa que estén estrechamente relacionadas entre sí.

Si las dos (o más) variables están estrechamente relacionadas por función, en lugar de por tipo de variable, entonces tal vez podrían declararse juntas.es decir.Sólo si tiene sentido para un lector de su programa ver las dos variables juntas, en realidad deberían colocarse juntas.

Aquí están mis razones:

  • Legibilidad, más fácil de detectar si sabes que solo hay uno en cada línea
  • Control de versiones, menos cambios dentro de línea, más adiciones, cambios o eliminaciones de una sola línea, más fácil de fusionar de una rama a otra

¿Qué pasa con el caso como:

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

¿Eso también se considera una mala práctica?Lo consideraría bien, ya que contradice algunos de los puntos planteados anteriormente:

  • definitivamente todos serían del mismo tipo (en mi mundo Java tipado estáticamente)
  • Se pueden agregar comentarios para cada
  • si tienes que cambiar el tipo de uno, probablemente tengas que hacerlo para todos, y los cuatro se pueden hacer en un solo cambio

Entonces, en un ejemplo (aunque sea un código maloliente), ¿hay razones por las que no harías eso?

De acuerdo con edg, y también porque es más legible y fácil de mantener tener cada variable en una línea separada.Inmediatamente ve el tipo, el alcance y otros modificadores y cuando cambia un modificador, se aplica solo a la variable que desea, eso evita errores.

  1. para que le resulte más evidente cuando utilice las herramientas de control de versiones (cubierto por Michel)
  2. para que sea más legible para usted cuando tenga el desbordamiento/desbordamiento insuficiente o el error de compilación más simple y sus ojos no puedan señalar lo obvio
  3. defender lo contrario (es decir,declaración de una sola línea con múltiples variables) tiene menos ventajas ("la visibilidad vertical del texto del código" es un singleton)

Es una mala práctica sobre todo cuando puedes y quieres inicializar variables en la desaceleración.Un ejemplo en el que esto podría no ser tan malo es:

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

Generalmente lo es, por el control de versiones y los motivos de comentarios discutidos por otros, y lo aplicaría en el 95% de todos los casos.sin embargo, hay circunstancias en las que sí tiene sentido, por ejemplo, si estoy codificando gráficos y quiero que un par de variables representen las coordenadas de textura (siempre referenciadas por convención como s y t), entonces las declaro como

int s, t;// coordenadas de textura

En mi humilde opinión, mejora la legibilidad del código al acortarlo y al hacer explícito que estas dos variables van juntas (por supuesto, algunos argumentarían a favor de usar una variable de clase de un solo punto en este caso).

mientras intentaba esta pregunta https://www.interviewbit.com/problems/remove-element-from-array/

El método 1 indica que se superó el límite de memoria para este código:

Tipo 1:

int i,j;

Tipo 2:

int i;
int j;

tipo 1:Da límite de memoria 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;
}

Mientras que el tipo 2 funciona perfectamente bien

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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top