a cura di Dario Dariol
 
    Soluzione Esercizio 002 - Hello World
    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)
     

    Regole del gioco

    I quiz presentati in questa rubrica trattano esclusivamente del linguaggio Java, così non sono richieste conoscenze di applets, servlets, Beans, etc.. Le uniche classi predefinite che possano eventualmente essere utilizzate sono quindi solo quelle appartenenti al package java.lang (classi come ad esempio: Thread, Class, ClassLoader, System, Runtime, etc...). Per risolvere i quiz non serve inoltre editare, compilare o testare nessun tipo di codice. Si tratta di quiz mentali che devono essere risolti solo con la testa e non con il computer. Quindi:

    • Non bisogna compilare ed eseguire nessun pezzo di codice: non sono interessato a sapere che con certe implementazioni della JVM si ottengono certi risultati mentre con altre implementazioni altri risultati. Sono invece interessato a quali siano l'insieme di risultati validi così come specificato dal linguaggio Java: cioè quali sono i risultati che un buon programmatore Java si può aspettare da una qualsiasi JVM che soddisfi le specifiche di Java?
    • Non occorre che inviate una soluzione del quiz a me o alla rivista. La soluzione sarà fornita nel prossimo numero. Una volta nota la soluzione (quindi solo dal prossimo mese in poi) potete allora eventualmente contestarla e/o commentarla inviandomi una email. Io sarò ben lieto di pubblicare e discutere tutti i pareri ricevuti.




MokaByte®  è un marchio registrato da MokaByte s.r.l.

Java® è un marchio registrato da Sun Microsystems; tutti i diritti riservati

E' vietata la riproduzione anche parziale
Per comunicazioni inviare una mail a
mokainfo@mokabyte.it