¿Está bien si omito las llaves en Java? [cerrado]

Resuelto vedran asked hace 13 años • 16 respuestas

He buscado esto, pero no pude encontrar una respuesta y por alguna razón me daba vergüenza preguntarle al profesor, debido a esa sensación cuando cientos de personas te miran fijamente...

De todos modos, mi pregunta es ¿cuál es la importancia de tener corchetes? ¿Está bien si los omito? Ejemplo:

for (int i = 0; i < size; i++)  {
   a += b;
}

vs

for (int i = 0; i < size; i++)
   a += b;

Sé que ambos funcionarán, pero si omito los corchetes (lo cual tiendo a hacer mucho debido a la visibilidad), ¿eso cambiará algo, algo en absoluto? Como dije, sé que funciona, lo probé docenas de veces, pero ahora algunas de mis tareas universitarias son cada vez más grandes y, por alguna razón, tengo un miedo irracional de que, a la larga, esto pueda causar algunos problemas. ¿Hay alguna razón para temer eso?

vedran avatar Nov 05 '11 19:11 vedran
Aceptado

No cambiará nada en absoluto aparte de la capacidad de mantenimiento de su código. He visto un código como este:

for (int i = 0; i < size; i++)
   a += b;
   System.out.println("foo");

lo que significa esto:

for (int i = 0; i < size; i++)
   a += b;
System.out.println("foo");

... pero cuál debería haber sido este:

for (int i = 0; i < size; i++) {
   a += b;
   System.out.println("foo");
}

Personalmente siempre incluyo los corchetes para reducir la posibilidad de confusión al leer o modificar el código.

Las convenciones de codificación en todas las empresas para las que he trabajado lo exigen, lo que no quiere decir que otras empresas no tengan convenciones diferentes...

Y en caso de que pienses que nunca haría una diferencia: una vez tuve que corregir un error que era más o menos equivalente al código anterior. Fue notablemente difícil de detectar... (es cierto que esto fue hace años, antes de que comenzara las pruebas unitarias, lo que sin duda habría facilitado el diagnóstico).

Jon Skeet avatar Nov 05 '2011 12:11 Jon Skeet

El uso de llaves hace que el código sea más fácil de mantener y comprensible. Por lo que deberías considerarlos por defecto .

A veces evito el uso de llaves en las cláusulas de guardia para que el código sea más compacto. Mi requisito para esto es que sean ifdeclaraciones seguidas de una declaración de salto , como returno throw. Además, los mantengo en la misma línea para llamar la atención sobre el modismo, por ejemplo:.

if (!isActive()) return;

También se aplican al código dentro de bucles:

for (...) {
  if (shouldSkip()) continue;
  ...
}

Y a otras condiciones de salto desde métodos que no necesariamente están en la parte superior del cuerpo del método.

Algunos lenguajes (como Perl o Ruby) tienen una especie de declaración condicional , donde no se aplican llaves:

return if (!isActive());
// or, more interestingly
return unless (isActive());

Lo considero equivalente a lo que acabo de describir, pero respaldado explícitamente por el lenguaje.

Jordão avatar Nov 05 '2011 15:11 Jordão