Home
Guardiamo dentro un programma in Java

23 Novembre 2018

Guardiamo dentro un programma in Java

di

È il linguaggio di programmazione forse più diffuso in assoluto, da cui dipendono infiniti sistemi. Quali regole bisogna osservare?

Un programma Java è fatto da uno o più file di codice sorgente definiti come un’unità di compilazione (compilation unit), la quale è costituita, in linea generale e a un più alto livello, dalle seguenti parti fondamentali.

  • una dichiarazione di package, che fornisce un nome completamente qualificato (fully qualified name) del package cui la predetta unità di compilazione appartiene;
  • delle dichiarazioni di importazione, che consentono di far riferimento ai tipi appartenenti ad altri package e ai membri statici dei tipi impiegando direttamente il loro nome semplice (simple name);
  • delle dichiarazioni, top level, dei tipi (classi e interfacce).

Ogni unità di compilazione è dunque modellata, idealmente, in più parti strutturali e semantiche che sono combinate insieme con lo scopo di formare un programma. Abbiamo quattro elementi di base che formano la struttura lessicale di un file sorgente Java: terminatori di riga, spazi, commenti e token; gli spazi, i commenti e i token sono definiti come elementi di input (input element) dell’unità di compilazione. Degli elementi indicati, solo i token hanno un impatto significativo sulla struttura sintattica di un programma Java; infatti, gli spazi e i commenti sono impiegati solo per separare i token. Formano i token gli identificatori, le keyword, i letterali (integer, floating-point, boolean, character, string e null), gli operatori e i segni di punteggiatura.

Questioni di stile

Per Java il numero di caratteri di spaziatura (spazi, tabulazione e così via) impiegati come separatori tra i token è libero: ogni programmatore può scegliere quello che preferisce, secondo il suo personale stile di scrittura. Tuttavia un token non può essere “diviso” senza causare un errore e cambiarne la semantica. Lo stesso vale per un letterale stringa, con il seguente distinguo: al suo interno è sempre possibile inserire dei caratteri di spazio, ma è un errore separarlo all’interno dell’editor su più righe premendo il tasto Invio. A partire dagli elementi lessicali significativi si costruiscono, principalmente, le statement, ossia le istruzioni proprie di un programma Java, che sono rappresentate dalle dichiarazioni, dalle espressioni, dalle selezioni, dalle iterazioni e così via, come si vede in questa figura.

Struttura di un programma Java

Costituzione strutturale di un generico programma in Java con l’entry-point main.

Quanto alle istruzioni, esse rappresentano azioni o comandi che devono essere eseguiti durante l’esecuzione di un programma. Infine, per Java ogni istruzione singola (single-line statement) deve terminare con il carattere punto e virgola (;) mentre due o più istruzioni (multi-line statement) possono essere raggruppate insieme a formare un’unica entità sintattica, definita blocco (block statement), se incluse tra le parentesi graffe aperta, {, e chiusa ,}. Può capitare che nel codice sorgente si possa rilevare la scrittura di una sola istruzione posta in un blocco di istruzioni. Ciò non è sintatticamente errato e viene fatto, comunemente, per ragioni di stile e indentazione. Nella prossima tabella mostriamo tutte le keyword del linguaggio; una tabella successiva elenca gli operatori utilizzabili e uno snippet di codice evidenzia alcune keyword, operatori, identificatori, letterali e così via.

Che cos’è una keyword

Una keyword (parola chiave) è una sequenza di caratteri riservata, che non è permesso impiegare come identificatore per denominare, per esempio, una variabile o un metodo. Le restricted keyword, invece, possono essere usate nell’ambito di un programma Java come identificatori perché hanno una semantica solo nell’ambito della dichiarazione di un modulo.

Le keyword del linguaggio Java
abstract assert boolean break byte case
catch char class const continue default
do double else enum exports2 extends
final finally float for if goto
implements import instanceof int interface long
module native new open, opens package private
protected provides public requires return short
static strictfp super switch synchronized this
throw throws to transient transitive try
uses void volatile while with _

Le keyword const e goto sono riservate anche se nel linguaggio non sono utilizzate. Le keyword exports, module, open, opens, provides, requires, to, transitive, uses e with sono restricted keyword, ossia keyword che hanno una semantica solo nell’ambito della dichiarazione di un modulo. Il singolo carattere underscore (_) è una keyword del linguaggio. Non è dunque più possibile utilizzarlo, singolarmente, come identificatore di una variabile (per esempio, scrivere un’istruzione come int _ = 10; darà il seguente messaggio di compilazione: error: as of release 9, ‘_’ is a keyword, and may not be used as an identifier. Ricordiamo che una keyword (parola chiave) è una sequenza di caratteri riservata, che non è permesso impiegare come identificatore per denominare, per esempio, una variabile o un metodo. Le restricted keyword, invece, possono essere usate nell’ambito di un programma Java come identificatori perché hanno una semantica solo nell’ambito della dichiarazione di un modulo.

Segni di punteggiatura del linguaggio Java
{ } [ ] ( ) . , ; @ ::
Che cos’è l’operatore

Gli operatori sono simboli utilizzati nell’ambito di espressioni, atti a descrivere operazioni a uno o più operandi. Così, un’espressione come x * z utilizza l’operatore * per moltiplicare l’operando x per l’operando z. I segni di punteggiatura, invece, sono impiegati per eseguire raggruppamenti e separazioni. Per esempio, le parentesi graffe { } servono per raggruppare le istruzioni in un blocco; la,virgola serve per separare più variabili in una singola dichiarazione e così via. Alcuni simboli, a seconda del contesto, possono essere trattati come segni di punteggiatura oppure come operatori. Per esempio, le parentesi tonde, quando sono usate nell’ambito della definizione di un metodo, agiscono come segni di punteggiatura per raggruppare i parametri; ma quando sono impiegate nell’ambito di utilizzo di un metodo agiscono come un operatore di invocazione. Allo stesso modo le parentesi quadre, quando sono usate nell’ambito della dichiarazione di un array, agiscono come segni di punteggiatura, per separare il tipo di dato dell’array dal suo identificatore; ma quando sono impiegate nell’ambito di utilizzo di un array agiscono come un operatore di accesso indicizzato a un elemento dell’array. In pratica, anche se in accordo con la specifica del linguaggio Java, i simboli ( ) e [ ] sono tecnicamente dei segni di punteggiatura; tuttavia possono agire anche da operatori.

Operatori del linguaggio Java
= > < ! ~ ? : ->
== >= <= != && || ++
+ * / & | ^ %
<< >> >>> <<= >>= >>>= += -=
*= /= &= |= ^= %=

Per concludere, ecco alcuni esempi di keyword, operatori, identificatori, letterali presentati direttamente all’interno di codice Java.

public class Snippet_1_4
{
// public, static, void -> keyword
// main, args           -> identificatori
// []                   -> segno di punteggiatura di separazione
// ()                   -> segno di punteggiatura di raggruppamento
public static void main(String[] args)
// { -> segno di punteggiatura di raggruppamento
{
// int                  -> keyword
// number, temp, status -> identificatori
// ,                    -> segno di punteggiatura di separazione
// ;                    -> segno di punteggiatura di separazione
int number, temp, status;
// int, float, char -> keyword
// a, f, c          -> identificatori
// =                -> operatore
// 100              -> letterale intero
// 120.78f          -> letterale in virgola mobile
// 'A'              -> letterale carattere
// ;                -> segno di punteggiatura di separazione
int a = 100;
float f = 120.78f;
char c = 'A';
// string       -> keyword
// name         -> identificatore
// =            -> operatore
// "Pellegrino" -> letterale stringa
// ;            -> segno di punteggiatura di separazione
String name = "Pellegrino";
// } -> segno di punteggiatura di raggruppamento
}
}

Questo articolo richiama parti del Capitolo 1 di Java 11. 

Java 11

Il punto di arrivo di tanti programmatori.

L'autore

  • Pellegrino Principe
    Pellegrino Principe lavora come ricercatore informatico e capo sviluppatore software presso il Drappello Analisi e Studi della Sezione E-Government del Comando Generale della Guardia di Finanza di Roma dove è anche docente in Linguaggi di Programmazione. È appassionato dei linguaggi con una sintassi “C-like”.

Iscriviti alla newsletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.