Se dice que en un libro de texto que he estado buscando una clase, una declaración puede estar vacía (la declaración nula). La declaración nula se define como solo un punto y coma.
No hace absolutamente nada en tiempo de ejecución. La declaración nula rara vez se usa.
Como programador con experiencia moderada, me parece interesante que digan que rara vez se usa, esto implica que en algún lugar, hay un uso para él.
¿Cuál podría ser el uso de tal declaración?
Puede usarlo cuando una declaración es sintácticamente requerida pero no semánticamente requerida. El caso más común es omitir una de las partes de un bucle for, como este ejemplo , aunque la mayoría de las personas encuentran que el uso es extraño y difícil de leer. Como dice tu libro, rara vez se usa.
fuente
while ( sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { ; }
todo en líneas separadas, por supuesto. Podría haberlo escrito comowhile ( true ) { if ( ! sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { break; } }
, pero eso estaría mal.void method(){ //code here. If(condition){return ;}}
.Prefiero usar un bucle while , pero una expresión nula te permite escribir esto:
Sin embargo, una declaración nula le permite escribir esto:
El objetivo principal es perder el tiempo del pobre programador de mantenimiento que viene detrás de ti y se pregunta por qué el hilo no se está ejecutando. Una declaración debe seguir un rato. Un solitario; Es una declaración. Entonces, este bloque de declaración no es realmente parte del ciclo.
Eso no quiere decir que no haya buenos usos. Solo son raros. Suelen verse así:
Porque de esta manera parece que quieres hacer eso (incluso esto a veces no es suficiente).
En conjunto, esta declaración nula se denomina NOP . En Python se llama un pase . En java (y los otros hijos de c) es un punto y coma como has dicho, o incluso afirmar verdadero;
Sé de algunos usos:
Semántica .
Hay una diferencia entre un espacio vacío y poner un cero como respuesta. Dice claramente, no, no me olvidé de poner algo aquí. Esto nada debe ser nada. No es nada explícito. Este espacio fue intencionalmente dejado en blanco. Así es como obtenemos N / A para compilar.
El patrón nulo
Imagine una máquina de señalización luminosa complicada y costosa que recogió repetidamente una bombilla de color de una cinta transportadora, la atornilló a un enchufe, la encendió, la quitó y recogió la siguiente. Podrías controlar lo que indica esta cosa por el color de las bombillas que pones en el cinturón. Genial, ahora que finalmente está funcionando perfectamente, tu jefe quiere que crees una forma de controlar el tiempo de estas señales. Quiere agregar una brecha entre los mensajes. Recuerdas con horror que muchas partes se preocupan por el momento de estas señales y qué dolor fue sincronizarlas. ¿Cómo vas a controlar el tiempo sin que esto te mantenga en el trabajo durante el fin de semana? Miras un contenedor de bombillas quemadas y obtienes, bueno, no literalmente, una idea brillante.
A veces quieres usar el polimorfismo para apagar algo sin romper nada.
Depuración
Cuando establece un punto de interrupción, necesita que haya un lugar para el punto de interrupción. Ahora, seguro que algunos depuradores le permitirán configurarlo en la llave de cierre, pero si no lo hacen, es bueno que el lenguaje le permita forzar que haya un lugar para colocar uno, incluso si ese lugar no hace nada.
No es realmente una cosa de Java, pero también hay:
Violín binario
La instrucción NOP de ensamblajes permite jugar con el ejecutable binario compilado. Pero los compiladores modernos de Java se optimizan tanto que no estoy seguro de que el punto y coma no se vaya solo. Pero en los viejos tiempos también usábamos estos espacios vacíos en el ejecutable para controlar el tiempo o permitirnos caer en un gancho más tarde. Sin el NOP, habría instrucciones reales allí, así que si quisieras engancharlo, tendrías que copiar esas instrucciones en otro lugar para dejar espacio para el gancho. Esto funciona igual de bien en el lenguaje c del que Java obtiene gran parte de su sintaxis. Pero no creo que este enganche de gancho ocurra mucho en Java. Usamos la Programación Orientada a Aspectos para hacer eso.
fuente
for
no es declaraciones nulas. Las declaraciones nulas (también conocidas como declaraciones vacías) pueden aparecer en el mismo lugar donde pueden aparecer otras declaraciones (como unaif
), pero los paréntesis siguientesfor
no permiten declaraciones entre los puntos y comas, sino solo un inicializador y dos expresiones, que resultan ser opcionales. Por lo tanto, es un uso diferente del punto y coma que como un terminador de declaración. Una declaración vacía sería el último punto y coma enfor(;;);
Lo uso porque Java está diseñado de una manera que no es congruente con el lenguaje humano. Lo mismo es cierto de C.
Una declaración es
statement;
.Una declaración if-then-else es
if (condition) statement; else statement;
Una instrucción if-then-else con bloques compuestos es
if (condition) {statements} else {statements}
Esto es claramente una tontería.
Por consiguiente, escribo lo
if (condition) {statements} else {statements};
que es lógico y razonable.Si los diseñadores de Java quieren tratar esto como si fuera entonces seguido de una declaración nula, estoy de acuerdo con eso. Si los hace felices, déjelos felices.
fuente
if (condition) {statements;} else {statements;}
. Además, Java es bastante consistente sobre no necesitar;
s después}
. Algo así como que los lenguajes humanos a menudo no pegan un punto al final de una oración que ya termina con un signo de interrogación. (Claro, hay las!?
o?!
los finales, pero los que son sólo aproximaciones de‽
, el carácter interrobang .)