Punto y coma al final de la declaración "si"

Resuelto Erik Bergsten asked hace 11 años • 18 respuestas

Hoy, después de media hora de buscar un error, descubrí que es posible poner un punto y coma después de una declaración if en lugar de código, así:

if(a == b);
// Do stuff

Lo que básicamente significa que las cosas se harán, sean aiguales bo no, y la ifdeclaración no tiene ningún sentido. ¿Por qué Java no me da un error? ¿Existe alguna situación en la que esto sería útil?

Erik Bergsten avatar Jan 02 '13 00:01 Erik Bergsten
Aceptado

¿Por que sucede?

La especificación del lenguaje Java dice que:

La declaración vacía

Una declaración vacía no hace nada.

EmptyStatement:
    ;

La ejecución de una declaración vacía siempre se completa normalmente

Básicamente significa que desea ejecutar una declaración vacía si a==b

if(a == b);

¿Qué deberías hacer?

Hay dos soluciones principales a este problema:

  1. Puede evitar problemas con declaraciones vacías utilizando el formateador de código y el contenido circundante dentro ifcon {y }. Al hacer esto, su declaración vacía será mucho más legible.

    if(a == b){
      ;
    }
    
  2. También puede consultar las herramientas utilizadas para el análisis de código estático como:

    • encontrar errores
    • Estilo de cuadros
    • pmd

    Pueden resaltar instantáneamente problemas como este.

Recomendaría combinar ambas soluciones.

Marcin Szymczak avatar Jan 01 '2013 17:01 Marcin Szymczak

¿Existe alguna situación en la que esto sería útil?

¿Útil? ¿Como en "hace que su código sea más limpio, más claro, más rápido y más fácil de mantener"? De nada. Lo más probable es que se trate de un código deficiente y confuso .

Pero no es necesariamente benigno . Dicha declaración puede realizar acciones y/o alterar el estado debido a métodos que causan efectos secundarios y, opcionalmente, evaluar esos métodos debido a un cortocircuito de los operadores .

if( a() && b() );

Aquí, a()o b()puede hacer algo y b()solo se ejecutará si a()es verdadero.

En cuanto a por qué , creo que la respuesta es simplemente que sería peor desviarse del comportamiento esperado definido (por ejemplo, declaraciones como while(reader.read());) que la alternativa de que los desarrolladores escriban código incorrecto.

Siempre es posible escribir código incorrecto. Y solo para reiterar, este sería un código incorrecto en casi cualquier caso.

Tim M. avatar Jan 01 '2013 17:01 Tim M.