Corso di Informatica (Programmazione) Lezione 7 (5 novembre 2008) Programmazione in Java: lessico, variabili, tipi primitivi, assegnamento a variabile e output a video 1 Il lessico di Java Gli elementi lessicali sono le più piccole unità che compongono la grammatica di Java (e di un linguaggio in generale). Essi sono: parole chiave riservate al linguaggio (ad esempio public, class, static, etc.) caratteri speciali (ad esempio {, }, =, +, etc.) identificatori stringhe (sequenze di caratteri) numeri senza segno 2 Il lessico di Java Le parole chiave sono parole riservate al linguaggio che non possono essere usate per gli identificatori: short byte int char long float double boolean this super interface extends if else while do for switch case break finally continue label transient void return synchronized class new static abstract final native private protected public package volatile default implements import instanceof (goto) (const) try catch throw 3 throws Il lessico di Java I separatori sono caratteri speciali che permettono di raggruppare o separare parti di codice: Parentesi graffe { } separano blocchi di codice Parentesi tonde ( ) specificano i parametri delle funzioni (o metodi) Parentesi quadre [ ] identificano gli elementi di un array (o vettore) Un’istruzione è la descrizione di una certa operazione Un blocco di codice è la sequenza di una o più istruzioni 4 Il lessico di Java … Punto e virgola ; separa le istruzioni (tutte le istruzioni devono terminare con ;) Virgola , separa i valori (parametri) quando si richiamano le funzioni (o metodi) Punto . usato per richiamare i metodi di una classe Un’istruzione è la descrizione di una certa operazione Un blocco di codice è la sequenza di una o più istruzioni 5 Il lessico di Java Un identificatore è un nome che il programmatore associa univocamente a: una classe una variabile un metodo un oggetto 6 Il lessico di Java Un identificatore è una sequenza di caratteri alfanumerici che deve soddisfare le regole seguenti: non deve iniziare con una cifra numerica non deve contenere spazi deve contenere solo lettere (maiuscole e minuscole), cifre numeriche (da 0 a 9), il carattere di underscore (_) e il carattere $ non sono quindi ammessi caratteri speciali quali |, &, *, etc. 7 Il lessico di Java … non deve essere una parola chiave del linguaggio ATTENZIONE! gli identificatori sono case sensitive (ad esempio l’identificatore MioProgramma è diverso da mioProgramma) 8 Identificatore di classe public class MioProgramma { public static void main(String arg[]) { System.out.println(“Hello world!”); } } La convenzione per attribuire ad una classe un identificatore è la seguente: deve rappresentare bene ciò che la classe descrive (ciò che il programma compie) deve iniziare con una lettera maiuscola se l’identificatore è composto da più parole, ogni parola deve iniziare con la lettera maiuscola 9 I commenti I commenti sono annotazioni del programmatore che il compilatore ignora e che quindi non traduce: commento delimitato da /* e */ il testo compreso tra /* e */ viene ignorato dal compilatore commento a fine riga iniziato dalla coppia // tutto il testo dopo // e che termina a fine riga, viene ignorato dal compilatore 10 I commenti Esempio di commenti public class MioProgramma { public static void main(String arg[]) { /*Questo programma stampa a video la scritta Hello world! Questo è un commento su più righe*/ //Questo è un commento su una riga System.out.println(“Hello world!”); } } 11 Le variabili In generale una variabile è un simbolo che può assumere un valore appartenente a un dato insieme di definizione. Ad esempio se l’insieme di definizione è l’insieme degli interi positivi I+ e x è una variabile definita su I+, allora x può assumere solo i valori che vanno da 1 a . 12 Le variabili In Java una variabile è una precisa locazione di memoria sul calcolatore: che possiede un identificatore in cui viene memorizzato un valore di un certo tipo Prima di poter usare una variabile occorre effettuarne la dichiarazione: assegnandole un identificatore (nome) attraverso cui accedere al suo contenuto specificandone il tipo di valore che dovrà contenere 13 Dichiarazione di variabili La dichiarazione di una variabile ha la seguente forma: <tipo> <identificatore>; Esempio di dichiarazione di una variabile intera: Identificatore (nome) della int isVariable; variabile Parola chiave che identifica i numeri interi con segno 14 Dichiarazione di variabili La dichiarazione di una variabile può comprendere anche l’inizializzazione del suo contenuto: <tipo> <identificatore>=<valore>; Esempio di dichiarazione di una variabile intera con inizializzazione: int isVariable=100; 15 Dichiarazione di variabili Più variabili dello stesso tipo possono fare parte di una dichiarazione multipla : <tipo> <id1>, <id2>, …, <idn>; Esempio di dichiarazione di tre variabili intere senza e con inizializzazione: int isVar1, isVar2, isVar3; int isVar1=2, isVar2=10, isVar3=100; 16 Identificatore di variabile La convenzione per attribuire ad una variabile un identificatore è la seguente: deve rappresentare bene ciò che la variabile rappresenta deve iniziare con una lettera minuscola se l’identificatore è composto da più parole, ogni parola (eccetto la prima) deve iniziare con la lettera maiuscola non deve contenere il carattere $ 17 I tipi di dati Un tipo di dati determina: il valore che una variabile (di un determinato tipo) può contenere le operazioni che possono essere effettuate su una variabile (di un determinato tipo) In Java esistono due categorie di tipi di dati: tipi primitivi i più semplici e non ulteriormente scomponibili tipi non primitivi complessi e composti da altri tipi di dati (a loro volta primitivi e non). Ad esempio: classi, interfacce, array 18 I tipi di primitivi interi Memoria usata Range di valori byte 8 bit (1 byte) -128, +127 short 16 bit (2 byte) -32768, +32767 32 bit (4 byte) -2.147.483.648, +2.147.483.647 64 bit (8 byte) -9.223.372.036.854.775.808, +9.223.374.036.854.775.808 Nome int long Tipo di valore intero 19 Gli altri tipi di primitivi Nome float double Tipo di valore Memoria usata Range di valori floating point (virgola mobile) 32 bit (4 byte) +/- 3,4028… x 10+38, +/- 1,4023… x 0-45 64 bit (8 byte) +/- 1,767… x 10+308, +/- 4,940… x 0-324 char singolo carattere 16 bit (2 byte) tutti i caratteri Unicode boolean true o false 1 bit true, false 20 I tipi primitivi (un esempio) public class EsempioDichiarazione { public static void main(String arg[]) { byte isByte; short isShort; int isInt; long isLong; float isFloat; double isDouble; char isChar; boolean isBoolean; } } 21 Letterali stringa e carattere Letterale stringa sequenza di caratteri racchiusa tra doppi apici “” esempio: “Hello world!” è un letterale stringa composto da 12 caratteri Letterale carattere carattere appartenente al codice Unicode racchiuso tra singoli apici ‘’ esempio: ‘a’ è un letterale carattere Attenzione! La scrittura ‘a’ denota un singolo carattere, mentre la scrittura “a” denota una stringa composta di un singolo carattere 22 Operatore di assegnamento ‘=‘ L’operatore di assegnamento ‘=‘ permette di assegnare un valore ad una variabile dopo la sua dichiarazione. L’istruzione di assegnamento ha la seguente forma: <identificatore>=<valore>; Il valore assegnato ad una variabile deve essere dello stesso tipo della variabile 23 Operatore di assegnamento ‘=‘ (un esempio) public class EsempioAssegnamento { public static void main(String arg[]) { byte isByte; short isShort; int isInt; long isLong; float isFloat; double isDouble; char isChar; boolean isBoolean; isByte=98; isShort=20000; isInt=1000000000; isLong=1000000000000; isFloat=2.567; isDouble=0.0000001; isChar=‘a’; isBoolean=true; } } 24 Operatore di assegnamento ‘=‘ Come si è già visto, il valore può essere anche assegnato alla variabile nell’ambito della sua dichiarazione per inizializzarne il contenuto: <tipo> <identificatore>=<valore>; Attenzione! E’ una buona abitudine assegnare il valore ad una variabile o quando la si dichiara (inizializzazione in fase di dichiarazione) o comunque prima di usarla. Il Contenuto di una variabile solo dichiarata è INDEFINITO 25 Operatore di assegnamento ‘=‘ (un esempio) public class EsempioInizializzazione { public static void main(String arg[]) { byte isByte=98; short isShort=20000; int isInt=1000000000; long isLong=1000000000000; float isFloat=2.567; double isDouble=0.0000001; char isChar=‘a’; boolean isBoolean=true; } } 26 Output a video Le due istruzioni di output a video sono: System.out.print(<print_str>); che stampa a video ciò che è specificato da <print_str> e System.out.println(<print_str>); che stampa a video ciò che è specificato da <print_str> e va a capo 27 Output a video (un esempio) Il seguente codice: int x; x=3; System.out.println(“x vale “+x); stampa a video la stringa: x vale 3 e va a capo. Il contenuto di x (l’intero 3) viene convertito nella stringa “3” e poi concatenato a “x vale “ per ottenere la stringa “x vale 3” da stampare a video 28 Output a video (un esempio) Il seguente codice: int x; x=3; int y=4; System.out.println(“x vale “+x+” e y vale “+y); stampa a video la stringa: x vale 3 e y vale 4 e va a capo. I contenuti di x e y (interi 3 e 4) vengono trasformati rispettivamente nelle stringhe “3” e “4” prima di effettuare la concatenazione di “x vale “, di “3”, di “ e y vale “ e 29 di “4” Output a video (un esempio) Il seguente codice: int x=3; int y=4; System.out.println(x+y); stampa a video la stringa: 7 e va a capo. In questo caso viene effettua prima la somma dei contenuti di x e y (3+4=7) e poi il risultato intero viene convertito nella stringa “7” da stampare a video 30 Output a video (un esempio) Il seguente codice: int x=3; int y=4; System.out.println(“Valori “+x+y); stampa a video la stringa: Valori 34 e va a capo. I contenuti di x e y (interi 3 e 4) vengono convertiti nelle stringhe “3” e “4” e poi concatenati alla stringa “Valori “ per ottenere la stampa di “Valori 34” 31 Output a video Riassumendo, l’operatore + usato nell’argomento delle funzioni di output a video, tenta prima di convertire tutti gli operandi in un unico tipo e successivamente esegue una somma, se gli operandi convertiti sono tutti numeri, o una concatenazione, se gli operandi convertiti sono tutti stringhe. Se anche solo uno degli operandi iniziali è una stringa, allora gli operandi convertiti saranno tutti stringhe. 32