L'esercizio
proposto lo scorso mese proponeva una ennesima rivisitazione dei programmi
Ciao
Mondo.
Qual'è
il piu' piccolo file sorgente A.java
che una volta compilato con javac
A.java
ed eseguito con Java
A stampa
Hello
World
a terminale?
Ci
sono due possibili soluzioni:
Prima
soluzione:
File
A.java di 66 caratteri:
class
A{static{System.out.println("Hello World");System.exit(0);}}
Questa
soluzione sfrutta gli static
initializers di Java e suggerisce l'idea che non occorra sempre la
presenza di un metodo static
public void main(String[]a)
per ottenere un programma Java, ma se ne possa fare a meno (ovviamente
in quei casi in cui non sia necessario accedere ai parametri Args
del main).
Notate la necessità della chiamata System.exit(0)
per evitare la generazione di una exception allorché la JVM cerchi
di accedere al metodo main
inesistente.
Seconda
soluzione:
File
A.java di 19 caratteri:
class
A extends B{}
File
B.java di 79 caratteri:
class
B{static public void main(String[]a){System.out.println("Hello World");}}
Questa
soluzione è senza dubbio una forzatura del quesito iniziale. Anche
se il file sorgente A.java gode delle proprietà richieste, l'esercizio
non va a buon fine senza l'esistenza del file B.java! Questa soluzione
serve però anche a ricordarci che Java è un linguaggio Object
Oriented e quindi è più che lecito usare la classe A come
estensione di un'altra classe B che effettivamente realizza ciò
che è richiesto.
Più
in generale la classe A sopra proposta soddisfa tutti i quesiti del tipo:
Qual'è
il più piccolo file sorgente A.java
che una volta compilato con javac
A.java
ed eseguito con java
A
realizzi la funzione XXX (con XXX a piacere)