1. Compilatore Java
A proposito, sentirete dire più di una volta che il vantaggio indiscutibile di Java rispetto ad altri linguaggi è la multipiattaforma. Che cosa significa e come si usa? Partiamo da lontano.
Il fatto è che un computer sa eseguire solo comandi elementari.
Per i cani esistono comandi come «Vicino», «Zampa» e altri: quando li sente, il cane fa qualcosa di importante. Per il computer il ruolo di tali comandi è svolto dai numeri: ogni comando è codificato da un numero (detto anche codice macchina).
Scrivere un programma sotto forma di numeri è molto difficile, perciò le persone hanno inventato i linguaggi di programmazione e i compilatori. Un linguaggio del genere, da un lato, è comprensibile all’uomo e, dall’altro, al compilatore. Un compilatore è un programma speciale che traduce il testo di un programma, scritto in un linguaggio di programmazione, in un insieme di codici macchina.
Di solito il programmatore scrive il programma in un linguaggio di programmazione e poi avvia il compilatore, che, sulla base dei file con il codice scritti dal programmatore, crea un unico file con codice macchina — il programma finale (compilato).
- Programma in linguaggio C++
-
Compilatore
- Programma, composto da codici macchina
Il programma risultante può essere eseguito subito sul computer. Lo svantaggio di questo approccio è che il codice del programma ottenuto dipende fortemente dal processore e dal sistema operativo. Un programma compilato per Windows non funzionerà su un telefono con Android.
Se avete scritto un programma per Android, sul sistema operativo Windows non si avvierà!
Ma Java adotta un approccio molto più innovativo.
- Programma in linguaggio Java
-
Compilatore Java
- Programma, composto da codici speciali (bytecode)
-
Java VM
- Programma, composto da codici macchina
Il compilatore Java non compila tutte le classi in un unico programma in codice macchina. Invece compila ciascuna classe separatamente, e non in codici macchina, bensì in un codice intermedio speciale (bytecode). La compilazione in codice macchina avviene all’avvio del programma.
Chi compila quindi il programma in codice macchina al suo avvio?
Per questo esiste un programma speciale chiamato JVM (Java Virtual Machine) — la Macchina Virtuale Java. Prima si avvia lei e poi — il programma composto da bytecode. Ed è la JVM che, prima dell’esecuzione del programma desiderato, lo compila in codice macchina.
Se avete un processore potente che supporta un set più ampio di istruzioni macchina, durante la «seconda compilazione» verrà generato codice macchina ottimizzato proprio per il vostro processore e sistema operativo. Ecco perché Java a volte è più veloce di C++, che viene compilato subito in codice macchina e può usare solo le istruzioni di processore più diffuse.
2. Errori tipici in fase di compilazione
Per ora velocità e ottimizzazione del codice non sono così importanti; ciò che conta è che il compilatore verifica il vostro programma alla ricerca di errori. Controlla la correttezza del codice e non lo lascia passare se trova anche un piccolo errore.
Esempio di errore:
State cercando di assegnare un numero a una variabile che può contenere solo testo.
String userName = 42; // Ops! Non si può fare.
Il compilatore segnalerà subito un errore di tipi non corrispondenti: Cannot implicitly convert type 'int' to 'string'.
Altro esempio: un refuso nel metodo println:
System.out.printline("Ciao!"); // Errore nel nome del metodo
Il compilatore dirà: «Non esiste un metodo del genere — controlla la sintassi!»
Come leggere gli errori?
La maggior parte dei compilatori indica dove si trova l’errore nel codice e talvolta propone anche correzioni possibili. Non abbiate paura degli errori: ognuno di essi è un passo verso l’illuminazione e il superamento del vostro «boss» interiore.
3. Commenti
Immaginate: state scrivendo un programma complesso. Tutto funziona, siete dei geni! Ma dopo un mese riaprite proprio quel codice e... non capite nulla. Qualche riga di codice qui, una variabile strana là. In testa solo: «Questo l’ha scritto chiunque, tranne me!». Ed è qui che i commenti vi salvano.
I commenti sono come annotazioni ai margini di un libro di testo o biglietti sul frigorifero («Birra. Non bere. Per domani!»). Il compilatore li ignora, le persone — invece — no. I commenti permettono di spiegare il senso del codice, segnare dettagli importanti e persino «disattivare» porzioni di programma senza eliminarle.
Importante: nessun compilatore legge i vostri commenti, vengono completamente ignorati!
Commenti su una sola riga
In Java ci sono due tipi di commenti — a riga singola e multi‑riga. Quelli a riga singola iniziano con doppio slash // e proseguono fino a fine riga. Tutto ciò che segue // è considerato un commento ed è completamente ignorato dal compilatore.
Esempio:
System.out.println("Ciao, mondo!"); // Stampa un saluto a schermo
Qui // Stampa un saluto a schermo è un commento. Se nel codice non è chiaro a cosa serve una riga, scrivetelo così!
Altro esempio:
int x = 42; // Valore dell’età del programmatore
È possibile scrivere commenti a riga singola anche su righe a sé stanti:
// Inizializzazione della variabile con il nome utente
String userName = "Vasya";
Quasi come le battute in una sceneggiatura: il commento spiega il perché e il percome.
Commenti multi‑riga
E se avete accumulato un sacco di cose? Una vera storia? Per questo ci sono i commenti multi‑riga, che iniziano con /* e terminano con */. Tutto ciò che sta tra questi simboli viene ignorato dal compilatore, anche se sono più righe.
Esempio:
/*
Qui stampiamo a schermo il nome dell’utente.
Se il nome è assente, scriveremo "Ospite".
*/
System.out.println("Inserisci il tuo nome:");
Oppure così:
int age = 18; /* Valore iniziale dell’età
per un nuovo utente */
Attenzione: non si possono annidare commenti multi‑riga dentro altri commenti multi‑riga. Non cercate di essere più furbi del compilatore — non funzionerà.
Illustrazione:
| Tipo | Sintassi | Esempio |
|---|---|---|
| A riga singola | |
|
| Multi‑riga | |
|
4. Esempi dalla vita reale
«Disattivare» una riga di codice:
Capita che vogliate temporaneamente non eseguire un frammento di codice. I commenti qui sono perfetti:
// System.out.println("Testo che al momento non serve");
La riga è rimasta, ma il compilatore non la «vede».
Promemoria TODO e FIXME
I programmatori sono persone anche loro e a volte serve ricordare a se stessi che il codice non è ancora finito o che qui c’è un bug. Per questo spesso si scrive:
// TODO: aggiungere il controllo per input vuoto
// FIXME: questa funzione calcola male la somma
Molti editor e IDE evidenziano perfino queste parole!
I programmatori scherzano
// Non mi ritengo responsabile di questo codice. Mi hanno costretto a scriverlo contro la mia volontà.
// Caro io_dal_futuro! Per favore, perdonami per questo codice.
// Se lo vedrò ancora, dovrò iniziare a portare un'arma al lavoro.
// Se questa condizione dovesse mai verificarsi, per favore avvisatemi al tel. xxx-xxx-xxx: ricompensa.
// Caro programmatore:
//
// Quando avrai finito di "ottimizzare" questa sottoprocedura
// e capirai quanto sia stato un grave errore farlo,
// per favore aumenta il contatore qui sotto come avvertimento
// per il prossimo:
//
// ore_spese_qui = 42
// Quando ho iniziato a scriverlo, solo Dio e io capivamo cosa stessi facendo.
// Ora è rimasto solo Dio
// A volte mi sembra che il compilatore ignori tutti i miei commenti
// Dedico tutto il mio codice, tutto il mio lavoro a mia moglie Darlin, che
// dovrà mantenere me, i nostri tre figli e il cane, quando
// questo andrà in produzione.
Sì, i commenti possono essere molto divertenti. Dopotutto, li scrivono persone vere.
GO TO FULL VERSION