Nell’ultimo periodo in questi tutorial di java siamo andati molto avanti e abbiamo fatto un lungo percorso (anche se forse non ti sarai reso conto di quanto sei andato avanti nell’imparare il java).
Ora è il momento di usare tutte le varie nozioni che hai appreso durante questo percorso, più qualcosa di nuovo, per vedere la forma condizionale della programmazione…
Prima di continuare nella lettura assicurati di leggere i post precedenti che troverai sopra l’immagine in evidenza del post.
La scorsa volta, in questo articolo in cui trattavo gli algoritmi, avevo accennato dell’esistenza di tre forme principali di programmazione (che non troviamo soltanto in java, ma praticamente in tutti i tipi di linguaggi di programmazione). Avevo anche detto che fino ad ora hai visto la forma sequenziale, spiegando anche che cos’è e che caratteristiche ha.
Ora è arrivato il momento di vedere la seconda forma principale di programmazione, ovvero la condizionale.
La condizionale permette di porre al programma una condizione, quindi un bivio. Se questa condizione è giusta, verificata e rispettata allora il programma compie determinate operazioni, altrimenti ne compie delle altre.
Praticamente è un bivio. Il programma si divide in due strade differenti per poi ricongiungersi.
Vediamo l’esempio con un’algoritmo.
Potrai notare che in questo algoritmo ci sono molte cose differenti rispetto a quello che hai visto nel post precedente.
Algoritmo precedente.
Per prima cosa potrai notare una nuova forma geometrica, ovvero il rombo. Il rombo viene usato per specificare l’esistenza di una condizione. Quindi all’interno di questa figura geometrica viene inserito la condizione. Poi partono 2 frecce.
Se la condizione è vera si eseguono delle determinate operazioni, altrimenti se è falsa se ne compiono delle altre.
Alla fine il percorso si ricongiunge e il programma continua il suo percorso fino alla fine.
Andiamo ad analizzare brevemente la condizione scritta nel rombo.
v1 == 3
Non ti preoccupare, non ho sbagliato a scrivere e non sono impazzito tutto in un colpo 🙂 Ho messo il doppio uguale per un semplice motivo.
Il singolo uguale ha il significato di assegnare a una variabile o a un oggetto un valore. Il doppio uguale invece ha il simbolo di uguaglianza.
Quindi vuol dire che il valore di v3 è uguale a 3.
Poi se questa cosa è vera vengono eseguite determinate operazioni, altrimenti delle altre.
Bene ora vediamo di mettere questa novità in pratica con il codice.
Con questa novità oggi imparerai due keyword Java nuove (in realtà non si trovano soltanto in java, ma praticamente in ogni linguaggio di programmazione. Quindi questa forma potrà essere applicata praticamente quasi allo stesso modo anche negli altri linguaggi).
Vediamo innanzi tutto un’esempio pratico, che poi andremo a vedere insieme.
[java]
Scanner sc = new Scanner(System.in);
int menu = 0;
System.out.println("Premi 1 se vuoi calcolare un’addizione");
System.out.println("Premi 2 se vuoi calcolare una sottrazione");
System.out.println("Digita la tua scelta desiderata e premi invio");
menu = sc.nextInt();
if (menu == 1){
int n1 = 0, n2 = 0, ris;
System.out.println("Inserisci il primo e il secondo numero da sommare ->");
n1 = sc.nextInt();
n2 = sc.nextInt();
System.out.println("Il risultato e’ -> " + (ris = n1 + n2));
}
else{
int n1 = 0, n2 = 0, ris = 0;
System.out.println("Inserisci il primo e il secondo numero da sottrarre ->");
n1 = sc.nextInt();
n2 = sc.nextInt();
System.out.println("Il risultato e’ -> " + (ris = n1 – n2));
}
System.out.println("Il programma e’ terminato… ciao!");
[/java]
Il programma è piuttosto lungo, ma la maggior parte delle sue componenti le conosci già.
Vediamo le cose nuove.
Vediamo innanzi tutto che ci sono due parole chiavi nuove, ovvero if ed else. Ad un primo impatto queste due ti potrebbero sembrare dei metodi (perché hanno le parentesi tonde davanti), ma non lo sono. Riconosci che non lo sono dal fatto che queste parole sono evidenziate di un colore più scuro rispetto al resto del testo. Questo colore viene utilizzato per le parole chiave.
All’interno di queste parentesi tonde scriviamo la condizione, ovvero che il valore della variabile v1 deve essere uguale a 1.
If in inglese significa se e else oppure. Praticamente è lo stesso concetto che hai visto nell’algoritmo. Se la condizione è vera, si esegue il blocco di istruzioni dell’if (contenuto nelle parentesi graffe). Se la condizione non è verificata e quindi è falsa, si esegue il blocco di istruzioni dell’else.
Come possiamo vedere dal programma, questo sistema ci permette di fare molte cose, ad esempio permettere all’utente che userà il programma di compiere delle scelte, di scegliere cosa voler fare e cosa no. Ci permette anche di creare programmi che rispondano in modi diversi a seconda di diversi valori delle variabili.
Tutto questo in poche parole ci permette di creare dei programmi utili e funzionali.
Questo sistema è vastissimo e pian piano lo esploreremo tutto, fino a carpirne tutto il meccanismo e riuscire a sfruttarlo in modo totale.
Ora vediamo una curiosità sulle variabili.
Puoi notare che sia nell’if, che nell’else ho creato le stesse variabili, con lo stesso nome, per calcolare la somma e la sottrazione.
[java]
int n1 = 0, n2 = 0, ris = 0;
[/java]
Eppure se io facessi così nel main:
[java]
int n1 = 0, n2 = 0, ris = 0;
int n1 = 0, n2 = 0, ris = 0;
[/java]
Nella seconda riga il compilatore mi darebbe un bellissimo errore, perché non è possibile creare delle variabili dello stesso tipo e con lo stesso nome.
Questo perché poi il compilatore non riuscirebbe a distinguerle e quindi gestirle.
Perché allora nel programma che ho creato è possibile?
La risposta è molto semplice, ma poco ovvia.
È tutta una questione di livelli. Nei programmi che crei abitualmente ci sono due livelli. Il livello della classe e il livello del main. Se io creassi una variabile all’interno del blocco di istruzioni della classe, la potrei usare ovunque (tranne in certi casi che vedremo molto più avanti).
Quindi questa variabile la potrei usare anche nel main.
Ma se io creassi una variabile all’interno del blocco di istruzioni del main, potrei usare questa variabile soltanto all’interno del main.
Più si scende di livello e più la variabile ha meno visibilità.
Capiamo meglio questo sistema.
Possiamo definire il blocco di istruzioni della classe
[java]
public class Classe{
}
[/java]
come una cartella. Tutti i blocchi di istruzioni contenuti al suo interno, sono definibili come delle sottocartelle.
Quindi se una variabile viene creata all’interno del blocco di istruzioni del main (il main è un metodo), allora questa variabile verrà visualizzata all’interno del man stesso e all’interno di altri blocchi di istruzioni contenuti nel main (ad esempio l’if e l’else).
Quindi se creo una variabile nell’if, viene visualizzata soltanto nell’if e non nell’else. Quindi se nell’else questa variabile non esiste, posso crearla uguale a quella dell’else che per ll compilatore sembrerebbe una variabile nuova, mai creata.
In definitiva è tutta una questione di posizione. Più la posizione è in alto e più un certo elemento viene visualizzato e più la posizione è in basso e meno un certo elemento potrà essere visualizzato.
Bene, ora che hai capito (spero, nel caso non ti fosse chiaro, non ti preoccupare, contattami tramite questa pagina e ti potrò spiegare meglio l’argomento) questo aspetto delle variabili andiamo avanti.
Ritorniamo alla condizione dell’if (contenuta tra le parentesi tonde).
menu == 1
In questa condizione abbiamo applicato un operatore di uguaglianza, ovvero il doppio uguale. Ci sono altri tipi di operatori di questo genere.
Questi operatori si chiamano operatori condizionali e servono per creare delle condizioni.
Troviamo:
> il simbolo maggiore serve per stabilire che il valore di una variabile, in questo caso la variabile menu, deve essere maggiore di un determinato valore.
Es:
menu > 5
Nell’esempio, il valore della variabile menu deve essere maggiore di 5
< Il simbolo minore fa la stessa cosa, ma al contrario del simbolo maggiore. Quindi stabilisce che il valore di una variabile deve essere minore di un determinato valore.
Es:
menu < 5
Nell’esempio il valore della variabile menu deve essere minore di 5.
>= Il simbolo maggiore uguale stabilisce che il valore di una variabile deve essere maggiore o uguale a un determinato valore.
Es:
menu >= 5
Nell’esempio il valore della variabile menu deve essere maggiore o uguale a 5.
Stessa cosa, ma al contrario con il simbolo minore o uguale, <=
Es:
menu <= 5
Nell’esempio il valore della variabile menu deve essere minore o uguale a 5.
Volendo possiamo sostituire i numeri di una condizione con sole variabili.
Creiamo una nuova variabile intera e gli diamo il valore 5:
[java]
int var = 5;
[/java]
menu == var
menu > var
menu < var
menu >= var
menu <= var
Come possiamo notare, nella prima riga abbiamo messo che il valore di menu deve essere uguale alla variabile var.
Le altre righe dell’esempio potrai capirle benissimo da solo.
Bene, direi che per il momento possiamo fermarci anche qui. La prossima volta finiremo di vedere gli operatori condizionali e andremo avanti.