Eccoci qui con il continuo della guida sul Java.
Oggi proseguiamo l’argomento della forma condizionale.
L’ultima volta avevamo visto una nuova figura geometrica presente in un algoritmo che rappresenta una condizione, ovvero il rombo.
Avevamo visto che una condizione fa diramare l’algoritmo in due vie distinte. Quando la condizione è verificata vengono eseguite determinate istruzioni; se la condizione non è verificata (quindi è falsa) vengono eseguite altre istruzioni.
Tutte queste istruzioni vengono stabilite e scritte dal programmatore.
Avevamo anche visto come si traduce tutto questo in Java, tramite la forma if e else (ricordo che queste due keyword non sono native del Java, ma del linguaggio C/C++ e che sono disponibili in tutti i linguaggi che hanno preso parte della sintassi di questi due linguaggi, come per altro il Java).
Avevamo anche visto alcuni operatori condizionali:
- L’operatore di uguaglianza ==
- L’operatore di maggioranza >
- L’operatore di minoranza <
- L’operatore maggiore uguale >=
- L’operatore minore uguale <=
Ho appena detto che la forma condizionale fa corrispondere a due vie, o la via vera o la via falsa.
Scusami la bruttezza grafica di questo algoritmo, ma si riesce a comprendere bene il tutto 🙂
Questo introduce il concetto di variabile booleana.
Cosa sarà mai questo tipo di variabile? Questo tipo fa sempre parte del genere di variabili primitive, ovvero quel genere di variabile in grado di memorizzare un solo valore al suo interno (tranne String che è un po’ differente).
Ora vediamo un po’ di storia.
Il termine booleano deriva da un matematico britannico nato nel 1815 a Lincoln di nome George Boole.
George Boole era un logico e un matematico e nel corso della sua vita ha pubblicato “An Investigation of the Laws of Thought” .
Quest’opera introdusse un nuovo sistema di ragionamento logico, studiando le leggi delle operazioni mentali alla base del ragionamento logico. Per vedere più nel dettaglio, guarda la pagina di Wikipedia che tratta di questo argomento.
Da quest’opera nacque il tipo di variabile booleana incentrato sul valore logico vero o falso, quindi true o false.
La sintassi di questa variabile è molto semplice:
[java]
boolean v1;
[/java]
boolean è il tipo di variabile e bisogna scriverlo per allocare alla variabile lo spazio necessario per il suo funzionamento.
v1 è l’identificatore
= assegnamento di un valore alla variabile v1
Le variabili booleane (al contrario di tutte gli altri tipi di variabili) se non hanno un valore non devono essere inizializzate. Le variabili di tipo booleane non possono contenere valori numerici o caratteri, ma ciò che contengono sono 2 tipi di parametri: true o false, che per il java sono due keyword speciali.
Ora vediamo il funzionamento delle variabili booleane con l’ausilio degli operatori condizionali visti fino ad ora.
[java]
boolean uguale = 3 == 6;
boolean maggiore = 3 > 1;
boolean minore = 2 < 3;
boolean maggioreu = 4 >= 4;
boolean minoreu = 5 <= 3;
System.out.println(uguale);
System.out.println(maggiore);
System.out.println(minore);
System.out.println(maggioreu);
System.out.println(minoreu);
[/java]
Il risultato di tutto questo è:
false
true
true
true
false
Se vedi il tutto potrai notare che il risultato è completamente corretto.
Come avrai potuto notare queste variabili non sono come le normali variabili, ma sono un po’ diverse. In tutte le variabili vengono memorizzati dei valori. In questa invece prima viene calcolato un valore (che non è un valore normale, ma un valore logico) e poi questo valore viene memorizzato.
False corrisponde allo 0 del sistema binario e True al valore 1 del sistema binario. Il sistema binario è composto da due valori: 0 e 1.
Detto tutto questo possiamo procedere.
Ora andiamo a vedere dei nuovi operatori condizionali o relazionali (si possono chiamare anche così).
Un nuovo operatore relazionale che possiamo andare a vedere è l’operatore “diverso” che ha come simbolo il punto esclamativo.
Con quest’operatore qualsiasi condizione scritta sarebbe falsa a priori. Ma non incappiamo in errori banali e per far questo vediamo meglio quest’operatore:
[java]
boolean noperatore = !6;
System.out.println(noperatore);
[/java]
Il risultato del programma è false.
Quest’operatore va inserito prima del valore della condizione, quindi nell’if si scriverebbe:
[java]
int numero = 6;
if (numero == !6){
}
else{
}
[/java]
Se inserissi delle istruzioni sia nel blocco if che nel blocco else, vedresti che seppur la condizione è vera, il programma eseguirebbe le istruzioni dal blocco else.
Quest’operatore ha il compito di negare una condizione. Quindi se noi scriviamo che la variabile numero deve essere uguale a 6, in realtà NON DEVE essere uguale a 6. Qualche incomprensione? La risolviamo subito:
[java]
int numero = 6;
if (numero == !5){
}
//…….
[/java]
In questo caso la variabile numero è di valore 6, ma la condizione dice che la variabile numero deve essere uguale a 5, quindi essendo sbagliata la condizione, l’operatore di negazione la rende corretta, giusta. Quindi l’operatore di negazione trasforma le condizioni vere in false e quelle false in vere.
Ok. Ora abbiamo praticamente finito con gli operatori relazionali.
Ora andiamo a vedere dei dettagli sintattici presenti nella forma condizionale.
Nell’istruzione if è possibile immettere più di una condizione. Infatti è possibile immettere tutte le condizioni che vogliamo, separate dalla doppia e commerciale “&&”.
Esiste anche la & singola, che ha lo stesso significato e scopo della doppia & “&&”, però si usa soltanto per i bit (i numeri 0 e 1 del sistema binario).
Quando si immettono più condizioni nell’istruzione if, perché la condizione totale sia vera e quindi vengano eseguite le istruzioni del blocco if, tutte le condizioni immesse devono essere verificate.
[java]
int n1 = 6;
int n2 = 4;
if (n1 == 6 && n2 >3){
}
//……………..
[/java]
Perché la condizione sia vera tutte le due condizioni (n1 == 6 e n2 > 3, devono essere vere, altrimenti il programma passa al blocco else, o meglio all’eventuale blocco else.
NB: è possibile inserire tutte le condizioni che si vogliono. L’unica cosa che bisogna accertarsi è che tra una condizione e un’altra ci sia &&.
Eh si, non si è obbligati a mettere il blocco else. Se non si aggiunge questo blocco di istruzioni e se la condizione dell’if dovesse essere errata, il programma procede con l’esecuzione delle istruzioni successive.
Naturalmente l’if è obbligatorio se no non sarebbe una condizione.
Esiste un’altra forma sintattica formata dai due caratteri || (questo carattere si scrive con shift + carattere backslash).
Questo tipo di sintassi, a differenza della precedente (&&), permette di aggiungere tutte le condizioni che vogliamo, ma non tutte devono essere corrette, ma per lo meno una di esse.
Questo tipo di carattere è equivalente alla porta logica or (o è giusto una cosa o un’altra o un’altra ancora -> detto in modo molto semplice).
Come nell’altro operatore, con questo possiamo inserire tutte le condizioni che vogliamo a patto che tra una e l’altra ci sia ||.
[java]
int numero = 5;
if (numero == 5 || numero > 5){
}
[/java]
Come potrai notare, la prima condizione è giusta, ma la seconda no. Ma siccome una condizione è corretta, allora la condizione generale è verificata.
Anche per il simbolo || esiste la variante | che serve per condizioni che utilizzano i bit (i numeri 0 e 1 del sistema binario)
Bene, direi che per adesso abbiamo fatto abbastanza. Vi aspetto al prossimo articolo 🙂