Java/Operatori: differenze tra le versioni
m ha spostato Wikibooks:Sandbox a Java/Operatori: la riscrittura è molto interessante, la salvo; poi ripristinerò la sandbox; ciò serve per preservare la cronologia |
wikifico |
||
Riga 1: | Riga 1: | ||
{{sandbox}} <!-- Scrivi SOTTO questa riga senza cancellarla. Grazie. --> |
|||
{{Java}} |
{{Java}} |
||
Riga 17: | Riga 16: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''+''' |
||
| |
| style="text-align:center;" | a + b |
||
| |
| style="text-align:left;" |somma a e b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''-''' |
||
| |
| style="text-align:center;" | a - b |
||
| |
| style="text-align:left;" |sottrae b da a |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''*''' |
||
| |
| style="text-align:center;" | a * b |
||
| |
| style="text-align:left;" |moltiplica a per b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''/''' |
||
| |
| style="text-align:center;" | a / b |
||
| |
| style="text-align:left;" |divide a per b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''%''' |
||
| |
| style="text-align:center;" | a % b |
||
| |
| style="text-align:left;" |calcola il resto della divisione intera di a per b (solo con int, longint e byte) |
||
|} |
|} |
||
Riga 48: | Riga 47: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''==''' |
||
| |
| style="text-align:center;" | a == b |
||
| |
| style="text-align:left;" | vero se a è uguale a b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''!=''' |
||
| |
| style="text-align:center;" | a != b |
||
| |
| style="text-align:left;" | vero se a è diverso da b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''>''' |
||
| |
| style="text-align:center;" | a > b |
||
| |
| style="text-align:left;" | vero se a è maggiore di b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''<''' |
||
| |
| style="text-align:center;" | a < b |
||
| |
| style="text-align:left;" | vero se a è minore di b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''>=''' |
||
| |
| style="text-align:center;" | a > b |
||
| |
| style="text-align:left;" | vero se a è maggiore o uguale a b |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''<=''' |
||
| |
| style="text-align:center;" | a <= b |
||
| |
| style="text-align:left;" | vero se a è minore o uguale a b |
||
|} |
|} |
||
Riga 91: | Riga 90: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''&&''' |
||
| |
| style="text-align:center;" | a() && b() |
||
| |
| style="text-align:left;" | vero se '''a()''' vero e '''b()''' vero |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''||''' |
||
| |
| style="text-align:center;" | a() || b() |
||
| |
| style="text-align:left;" | True se '''a()''' vero o '''b()''' vero o entrambi veri |
||
|} |
|} |
||
Riga 134: | Riga 133: | ||
''' a++ o ++a''' |
''' a++ o ++a''' |
||
Sono equivalenti in genere, ma la prima [[w:incrementa|incrementa]] la variabile prima di utilizzarla, la seconda dopo. |
Sono equivalenti in genere, ma la prima [[w:incrementa|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++];''' |
'''elementoNumeroA = elementi[a++];''' |
||
''(l'elemento preso sarà il numero a o a+1 ?)'' |
''(l'elemento preso sarà il numero a o a+1 ?)'' |
||
Riga 150: | Riga 149: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''-''' |
||
| |
| style="text-align:center;" |-a |
||
| |
| style="text-align:left;" |inverte il segno di a |
||
|- |
|- |
||
|} |
|} |
||
Riga 164: | Riga 163: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''!''' |
||
| |
| style="text-align:center;" |!a |
||
| |
| style="text-align:left;" |inverte il [[w:valore di verità|valore di verità]] di a |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''~''' |
||
| |
| style="text-align:center;" |~a |
||
| |
| style="text-align:left;" |[[w:complemento a uno|complemento a uno]] di a |
||
|} |
|} |
||
non è obbligatorio assegnarne il valore a un'altra variabile, ma potrebbe rendere incomprensibile il tuo programma. |
non è obbligatorio assegnarne il valore a un'altra variabile, ma potrebbe rendere incomprensibile il tuo programma. |
||
Riga 179: | Riga 178: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''>>''' |
||
| |
| style="text-align:center;" | a>>b |
||
| |
| style="text-align:left;" | sposta bit a bit '''a''' verso destra |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''<<''' |
||
| |
| style="text-align:center;" | a<<b |
||
| |
| style="text-align:left;" | sposta bit a bit '''a''' verso sinistra di b bit |
||
|} |
|} |
||
Riga 202: | Riga 201: | ||
! Operatore !! Uso !! Significato |
! Operatore !! Uso !! Significato |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''(nome_di_tipo)''' |
||
| |
| style="text-align:center;" |(double)a |
||
| |
| style="text-align:left;" |effettua una conversione di tipo |
||
|- |
|- |
||
| |
| style="text-align:center;" |'''sizeof''' |
||
| |
| style="text-align:center;" |'''sizeof a''' ''oppure'' '''sizeof(int)''' |
||
| |
| style="text-align:left;" |restituisce la dimensione in byte del dato (o del tipo) |
||
|} |
|} |
||
Riga 227: | Riga 226: | ||
} |
} |
||
L' |
L'operatore ?: sostituisce questa scrittura, pesante e pe''d''ante: |
||
modulo = a>0? a: -a; |
modulo = a>0? a: -a; |
||
che equivale alla precedente (e è |
che equivale alla precedente (e è molto più comoda). |
||
<!-- |
<!-- |
||
|^ |
|^ |
||
Riga 242: | Riga 241: | ||
--> |
--> |
||
[[Categoria: |
[[Categoria:Java|Operatori]] |
Versione delle 18:06, 11 gen 2008
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 agiscono su due variabili semplici (non su oggetti) di tipo compatibile (due double, un double e un int, ma MAI un boolean e un integero un byte e un oggetto), per produrre un risultato. Sono a loro volta 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, longint 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 uati 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( mangi() && dormi() ) staiLavorando = False;
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.
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 | ||||||||
<< | a<>5 è
00000100
FunzionaliIl loro significato è spesso oscuro, perché non hanno corrispondenti in aritmetica.
sizeof ha due forme possibili: dimensioneDellaMiaVariabile = sizeof laMiaVariabile; dimensioneDelTipoInteger = sizeof(int); la seconda è un' eredità del C: in Java è inutile, perché le dimensioni dei tipi sono fisse, a meno che vi interessi veramente sapere quanta memoria occupa un int o un float. 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). |