Java permite que ciertas palabras clave sean seguidas por una instrucción o un bloque de instrucciones. Por ejemplo:¿Por qué try/catch o synchronized en Java requiere un bloque de instrucciones?
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
compila, así como
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
Esto también es cierto para las palabras claves como for
, etc. while
Sin embargo, algunas palabras clave no permiten esto. synchronized
requiere una instrucción de bloque. Lo mismo para try ... catch ... finally
, que requiere al menos dos instrucciones de bloque después de las palabras clave. Por ejemplo:
try {
System.out.println("try");
} finally {
System.out.println("finally");
}
synchronized(this) {
System.out.println("synchronized");
}
obras, pero el siguiente no se compila:
try
System.out.println("try");
finally
System.out.println("finally");
synchronized (this)
System.out.println("synchronized");
Entonces, ¿por qué algunas palabras clave en Java requieren una declaración de bloque, mientras que otros permiten una sentencia de bloque, así como una sola ¿declaración? ¿Es esto una incoherencia en el diseño del lenguaje, o hay alguna razón para esto?
sospecho que el enfoque de declaración única está mal visto y se usa solo porque algo similar es posible en c. dado que c no se ha sincronizado o intentado, probablemente fueron con la opción "más segura". –
Porque esa es la sintaxis; AFAIK no hay ningún motivo técnico por el que deba haber un bloqueo, ya que podría crearse automáticamente. –
Aquí está mi suposición, FWIW: Los diseñadores de idiomas querían mantener una sintaxis similar a otros idiomas para ayudar en el aprendizaje. Pero sintieron que cuando se agregaron nuevas características del lenguaje, harían cumplir lo que algunos sienten que es un mejor estándar de codificación. O, tal vez, para las características de lenguaje menos utilizadas, ¿aceptaron su idea de una mejor codificación? – Marvo