Java/Operatori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
cambio avanzamento al 50%
Riga 84: Riga 84:
Agiscono su intere proposizioni e possono essere usati solo nei test ('''if, for, do, while'''), per congiungere più condizioni:
Agiscono su intere proposizioni e possono essere usati solo nei test ('''if, for, do, while'''), per congiungere più condizioni:
'''if( seiUscito(tu) || staiDormendo(tu) ) nonRispondiAlTelefono();'''
'''if( seiUscito(tu) || staiDormendo(tu) ) nonRispondiAlTelefono();'''
'''while( mangi() && dormi() ) staiLavorando = False;'''
'''while( staiLavorando() && dormi() ) fannullone = true;'''


{| {{prettytable}}
{| {{prettytable}}

Versione delle 07:49, 8 set 2011

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazione - Specifica di linguaggioJava/Tipi di dato - Libreria standardJava/Comunicazione seriale


Introduzione:     IntroduzioneJava/Introduzione   •   Procurarsi il JDKJava/Procurarsi il JDK
Il linguaggio:     Dal sorgente all'esecuzioneJava/Dal sorgente all'esecuzione   •   Il linguaggioJava/Il linguaggio   •   Programmazione ad oggettiJava/Programmazione ad oggetti
Aspetti avanzati:     Thread e parallelismoJava/Multithreading   •   Interblocco ricontrollatoJava/Interblocco ricontrollato   •   JavadocJava/Javadoc
Appendici:     EserciziJava/Esercizi   •   La macchina virtualeJava/La macchina virtuale   •   Errori e mitiJava/Errori e mitiTrucchi e consigliJava/Trucchi e consigli


Introduzione

Gli operatori servono a manipolare e confrontare le variabili e sono dunque alla base di ogni programma; Java ne mette a disposizione molti, con una sintassi simile a quella del C.

Definizione

Classifichiamo gli operatori in tre categorie a seconda del numero di operandi: unari (uno), binari (due) e ternari (tre). Cominciamo da quelli binari, i più comuni.

Operatori binari

Gli operatori binari possono essere divisi in:

Algebrici

Sono i quattro operatori algebrici fondamentali, a cui si aggiunge quello di resto della divisione e hanno lo stesso significato che assumono in aritmetica.

Operatore Uso Significato
+ a + b somma a e b
- a - b sottrae b da a
* a * b moltiplica a per b
/ a / b divide a per b
% a % b calcola il resto della divisione intera di a per b (solo con int, long e byte)

si usano per eseguire operazioni di somma, sottrazione, divisione e moltiplicazione:

 lunghezzaDellaCirconferenza = 2 * PI_GRECO * raggioDellaCirconferenza;

Relazionali

Sono detti 'relazionali' perché non hanno per risultato un numero, ma confrontano i due operandi e restituiscono un valore di verità:

Operatore Uso Significato
== a == b vero se a è uguale a b
!= a != b vero se a è diverso da b
> a > b vero se a è maggiore di b
< a < b vero se a è minore di b
>= a >= b vero se a è maggiore o uguale a b
<= a <= b vero se a è minore o uguale a b

vengono usati ovunque sia richiesto un test di verità:

 if( a >= b ) faiQualcosa();

Fai attenzione alla differenza tra == e .equals(), che verrà affrontata quando parlemo di oggetti (nel caso di tipi semplici non si può utilizzare la seconda forma).

Booleani

Sono detti cosí in onore di chi li ha introdotti: G. Boole. Per chiarezza -gli errori di programmazione sono sempre in agguato- sono suddivisi in logici e orientati ai bit.

Logici

Agiscono su intere proposizioni e possono essere usati solo nei test (if, for, do, while), per congiungere più condizioni:

 if( seiUscito(tu) || staiDormendo(tu) ) nonRispondiAlTelefono();
 while( staiLavorando() && dormi() ) fannullone = true;
Operatore Uso Significato
&& a() && b() vero se a() vero e b() vero
|| a() || b() True se a() vero o b() vero o entrambi veri

È garantito che vengono esaminate solo le proposizioni necessarie a stabilire il valore di veritá: se in

 if( controllaQuesto() && controllaQuello() )
Orientati ai bit

Agiscono su i singoli bit di cui sono composti gli operandi, eseguono cioè l'operazione su ogni coppia di bit (i primi, i secondi...) separatamente. Vanno applicati solo alle variabili numeriche.

Funzionali

Java ha aggiunto un operatore funzionale binario:

Operatore Uso Significato
instanceof a instanceof B vero se a è un'istanza della classe B

Per ora ignoratelo. Tornerà utile quando tratteremo classi e eredità.

Operatori #=

Istruzioni come:

 a = a + 1;
 b = 3 * b;
 c = c % d;
 e = e + f;

sono molto frequenti nella scrittura di programmi, cosí è stata inventata una forma abbreviata, il cui significato è identico a quelle precedenti,

 a+=1;
 b*=3;
 c%=d;
 

il loro uso rende il codice più intuitivo (io penso "Aggiungi a a b", non "Aggiungi a a b e metti il risultato in a") ma è un fatto personale, per il compilatore

 a = a + d; e a+=d;

sono equivalenti.

È sconsigliato -ma legittimo- l'uso di:

 &= |=

È invece un errore scrivere:

 controllaQuesto() &&= controllaQuello(); 

La facilità con cui si incontra l'operazione

 a+=1;

è tanto elevata che ne è stata concepita una forma ancora più breve:

 ++a o a++

Sono equivalenti in genere, ma la prima incrementa la variabile prima di utilizzarla, la seconda dopo. Ciò è di vitale importanza in istruzioni (a cui i programmatori C sono abituati, ma che è buona norma non usare in Java) come:

 elementoNumeroA = elementi[a++];
  (l'elemento preso sarà il numero a o a+1 ?)

ma indifferente in:

 for(int i = 0; i=100; i++); for(int i = 0; i=100; ++i);

Le stesse considerazioni valgono per a-- e --a.

Operatori unari

Agiscono su una sola variabile, alcuni richiedono che il risultato sia assegnato a una seconda, altri no.

Algebrici

Ha significato uguale al corrispettivo algebrico:

Operatore Uso Significato
- -a inverte il segno di a

il risultato deve essere assegnato a una variabile;

b = -a;

Booleani

Il significato è lo stesso che hanno in algebra booleana.

Operatore Uso Significato
! !a inverte il valore di verità di a
~ ~a complemento a uno di a

non è obbligatorio assegnarne il valore a un'altra variabile, ma potrebbe rendere incomprensibile il tuo programma.

Alcuni sono unari, malgrado abbiano due operandi:

Operatore Uso Significato
>> a>>b sposta bit a bit a verso destra di b bit
<< a<<b sposta bit a bit a verso sinistra di b bit

Il significato di "spostare bit a bit" è molto più semplice di quanto si pensi:

 se a era
   10000000
 allora a>>5 è
   00000100

Casting

Operatore Uso Significato
operatore di casting (double)a effettua una conversione di tipo detta cast

Operatori Ternari

È facile avere a che fare con variabili che devono assumere due valori differenti data una condizione. Per esempio:

 //calcoliamo |a| (il modulo di a)
 if(a >= 0)
 {  modulo = a;
 }
 else
 {  modulo = -a;
 }

L'operatore ?: sostituisce questa scrittura, pesante e pedante:

 modulo = a>0? a: -a;

che equivale alla precedente (e è molto più comoda).