Java consente a determinate parole chiave di essere seguite da un'istruzione o da un blocco di istruzioni. Per esempio:Perché try/catch o synchronized in Java richiede un blocco di istruzioni?
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
compila così come
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
Questo vale anche per le parole chiave come for
, while
ecc
Tuttavia, alcune parole chiave non consentono questo. synchronized
richiede una dichiarazione di blocco. Lo stesso per try ... catch ... finally
, che richiede almeno due istruzioni di blocco che seguono le parole chiave. Per esempio:
try {
System.out.println("try");
} finally {
System.out.println("finally");
}
synchronized(this) {
System.out.println("synchronized");
}
opere, ma il seguente non compila:
try
System.out.println("try");
finally
System.out.println("finally");
synchronized (this)
System.out.println("synchronized");
Allora perché alcune parole chiave in Java richiedono una dichiarazione di blocco, mentre altri permettono una dichiarazione di blocco così come un unico affermazione? Si tratta di un'incoerenza nella progettazione della lingua, o c'è una ragione per questa?
ho il sospetto che l'approccio di una singola dichiarazione sia disapprovato e utilizzato solo perché qualcosa di simile è possibile in c. dato che c non ha sincronizzato o provato, probabilmente è andato con l'opzione "più sicura". –
Perché questa è la sintassi; AFAIK non ci sono motivi tecnici per cui ci deve essere un blocco, poiché potrebbe essere creato automaticamente. –
Ecco la mia ipotesi, FWIW: I progettisti linguistici volevano mantenere una sintassi abbastanza simile ad altre lingue per facilitare l'apprendimento. Ma sentivo dove venivano aggiunte nuove funzionalità linguistiche, avrebbero rinforzato quello che secondo alcuni è uno standard di codifica migliore. O forse, per le funzionalità linguistiche meno frequentemente utilizzate, è stata presa l'idea di una migliore codifica? – Marvo