Java/Operatori: differenze tra le versioni

Wikibooks, manuali e libri di testo liberi.
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
BimBot (discussione | contributi)
m Robot: Changing template: Linguaggio Java
Riga 1: Riga 1:
{{sandbox}} <!-- Scrivi SOTTO questa riga senza cancellarla. Grazie. -->
{{sandbox}} <!-- Scrivi SOTTO questa riga senza cancellarla. Grazie. -->
{{Linguaggio Java}}
{{Java}}


=Introduzione=
=Introduzione=

Versione delle 17:55, 11 gen 2008

Un castello di sabbia
Un castello di sabbia

MODIFICA QUESTA PAGINA!

Benvenuti nella sandbox.

Nei parchi giochi, la sandbox è un'area delimitata, dove i bimbi giocano con paletta e secchiello. Analogamente, su Wikibooks la sandbox è una pagina dove si può scrivere liberamente, senza timore di fare danni in questo progetto che stiamo costruendo anche con il tuo contributo. Qui, se vuoi, puoi anche depositare bozze dei tuoi articoli in attesa di salvarli, anche se è più comodo usare per questo scopo le sottopagine della tua pagina utente (in questo modo: Utente:Nomeutente/Sandbox).

Fate qui le vostre prove!
Clicca qui per modificare il contenuto attuale.
Clicca qui per avere spazio bianco dove scrivere (sarà aggiunto in fondo alla pagina).
La sintassi wiki è spiegata alla pagina Aiuto:Markup. Dopo averla letta, se hai ancora un dubbio su come si fa, clicca qui e lascia un messaggio.

Considera che il tuo testo potrebbe non rimanere a lungo in questa pagina, che viene spesso sovrascritta da altri utenti e "ripulita" con una certa regolarità.


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'opeartore ?: sostituisce questa scrittura, pesante e pedante:

 modulo = a>0? a: -a;

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