Java/Operatori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Pietrodn (discussione | contributi)
m ha spostato Wikibooks:Sandbox a Java/Operatori: la riscrittura è molto interessante, la salvo; poi ripristinerò la sandbox; ciò serve per preservare la cronologia
Pietrodn (discussione | contributi)
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
|-
|-
|align="center"|'''+'''
| style="text-align:center;" |'''+'''
|align="center"| a + b
| style="text-align:center;" | a + b
|align="left"|somma a e b
| style="text-align:left;" |somma a e b
|-
|-
|align="center"|'''-'''
| style="text-align:center;" |'''-'''
|align="center"| a - b
| style="text-align:center;" | a - b
|align="left"|sottrae b da a
| style="text-align:left;" |sottrae b da a
|-
|-
|align="center"|'''*'''
| style="text-align:center;" |'''*'''
|align="center"| a * b
| style="text-align:center;" | a * b
|align="left"|moltiplica a per b
| style="text-align:left;" |moltiplica a per b
|-
|-
|align="center"|'''/'''
| style="text-align:center;" |'''/'''
|align="center"| a / b
| style="text-align:center;" | a / b
|align="left"|divide a per b
| style="text-align:left;" |divide a per b
|-
|-
|align="center"|'''%'''
| style="text-align:center;" |'''%'''
|align="center"| a % b
| style="text-align:center;" | a % b
|align="left"|calcola il resto della divisione intera di a per b (solo con int, longint e byte)
| 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
|-
|-
|align="center"|'''=='''
| style="text-align:center;" |'''=='''
|align="center"| a == b
| style="text-align:center;" | a == b
|align="left"| vero se a è uguale a b
| style="text-align:left;" | vero se a è uguale a b
|-
|-
|align="center"|'''!='''
| style="text-align:center;" |'''!='''
|align="center"| a != b
| style="text-align:center;" | a != b
|align="left"| vero se a è diverso da b
| style="text-align:left;" | vero se a è diverso da b
|-
|-
|align="center"|'''>'''
| style="text-align:center;" |'''>'''
|align="center"| a > b
| style="text-align:center;" | a > b
|align="left"| vero se a è maggiore di b
| style="text-align:left;" | vero se a è maggiore di b
|-
|-
|align="center"|'''<'''
| style="text-align:center;" |'''<'''
|align="center"| a < b
| style="text-align:center;" | a < b
|align="left"| vero se a è minore di b
| style="text-align:left;" | vero se a è minore di b
|-
|-
|align="center"|'''>='''
| style="text-align:center;" |'''>='''
|align="center"| a > b
| style="text-align:center;" | a > b
|align="left"| vero se a è maggiore o uguale a b
| style="text-align:left;" | vero se a è maggiore o uguale a b
|-
|-
|align="center"|'''<='''
| style="text-align:center;" |'''<='''
|align="center"| a <= b
| style="text-align:center;" | a <= b
|align="left"| vero se a è minore o uguale a b
| style="text-align:left;" | vero se a è minore o uguale a b
|}
|}


Riga 91: Riga 90:
! Operatore !! Uso !! Significato
! Operatore !! Uso !! Significato
|-
|-
|align="center"|'''&&'''
| style="text-align:center;" |'''&&'''
|align="center"| a() && b()
| style="text-align:center;" | a() && b()
|align="left"| vero se '''a()''' vero e '''b()''' vero
| style="text-align:left;" | vero se '''a()''' vero e '''b()''' vero
|-
|-
|align="center"|'''||'''
| style="text-align:center;" |'''||'''
|align="center"| a() || b()
| style="text-align:center;" | a() || b()
|align="left"| True se '''a()''' vero o '''b()''' vero o entrambi veri
| 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:
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
|-
|-
|align="center"|'''-'''
| style="text-align:center;" |'''-'''
|align="center"|-a
| style="text-align:center;" |-a
|align="left"|inverte il segno di a
| style="text-align:left;" |inverte il segno di a
|-
|-
|}
|}
Riga 164: Riga 163:
! Operatore !! Uso !! Significato
! Operatore !! Uso !! Significato
|-
|-
|align="center"|'''!'''
| style="text-align:center;" |'''!'''
|align="center"|!a
| style="text-align:center;" |!a
|align="left"|inverte il [[w:valore di verità|valore di verità]] di a
| style="text-align:left;" |inverte il [[w:valore di verità|valore di verità]] di a
|-
|-
|align="center"|'''~'''
| style="text-align:center;" |'''~'''
|align="center"|~a
| style="text-align:center;" |~a
|align="left"|[[w:complemento a uno|complemento a uno]] di 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
|-
|-
|align="center"|'''>>'''
| style="text-align:center;" |'''>>'''
|align="center"| a>>b
| style="text-align:center;" | a>>b
|align="left"| sposta bit a bit '''a''' verso destra
| style="text-align:left;" | sposta bit a bit '''a''' verso destra
|-
|-
|align="center"|'''<<'''
| style="text-align:center;" |'''<<'''
|align="center"| a<<b
| style="text-align:center;" | a<<b
|align="left"| sposta bit a bit '''a''' verso sinistra di b bit
| style="text-align:left;" | sposta bit a bit '''a''' verso sinistra di b bit
|}
|}


Riga 202: Riga 201:
! Operatore !! Uso !! Significato
! Operatore !! Uso !! Significato
|-
|-
|align="center"|'''(nome_di_tipo)'''
| style="text-align:center;" |'''(nome_di_tipo)'''
|align="center"|(double)a
| style="text-align:center;" |(double)a
|align="left"|effettua una conversione di tipo
| style="text-align:left;" |effettua una conversione di tipo
|-
|-
|align="center"|'''sizeof'''
| style="text-align:center;" |'''sizeof'''
|align="center"|'''sizeof a''' ''oppure'' '''sizeof(int)'''
| style="text-align:center;" |'''sizeof a''' ''oppure'' '''sizeof(int)'''
|align="left"|restituisce la dimensione in byte del dato (o del tipo)
| style="text-align:left;" |restituisce la dimensione in byte del dato (o del tipo)
|}
|}


Riga 227: Riga 226:
}
}


L'opeartore ?: sostituisce questa scrittura, pesante e pe''d''ante:
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 è mooolto più comoda).
che equivale alla precedente (e è molto più comoda).
<!--
<!--
|^
|^
Riga 242: Riga 241:
-->
-->


[[Categoria:Linguaggio Java|Operatori]]
[[Categoria:Java|Operatori]]

Versione delle 18:06, 11 gen 2008

Indice del libro

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


Funzionali

Il loro significato è spesso oscuro, perché non hanno corrispondenti in aritmetica.

Operatore Uso Significato
(nome_di_tipo) (double)a effettua una conversione di tipo
sizeof sizeof a oppure sizeof(int) restituisce la dimensione in byte del dato (o del tipo)

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).