53485 Letture

Corso Java - Terza lezione: le strutture principali

Nelle precedenti lezioni, abbiamo sinora fornito fondamentalmente una panoramica della programmazione ad oggetti ed una breve descrizione di come questa si affronti in Java; ci siamo cioè occupati di come deve essere "visto" un problema prima di essere risolto in Java. La scomposizione del problema in oggetti e, quindi, in classi, metodi e attributi è un procedimento che certamente richiede del tempo per essere correttamente assimilato ma è assolutamente fondamentale. Altrettanto basilare è, ovviamente, la conoscenza delle strutture e delle regole principali del linguaggio: esse costituiranno l'oggetto dei prossimi due articoli e non solo.
In questa terza lezione del nostro corso, ci occuperemo di come gestire il flusso di controllo del programma, ovvero delle strutture decisionali e dei cicli.

Strutture decisionali: if e if-else (se...altrimenti...)
Una istruzione decisionale è a tutti gli effetti il modo più semplice che abbiamo di effettuare delle scelte durante l'esecuzione del programma, ad esempio in base a dati immessi dall'utente o da essi derivati o ancora a dati casuali. La valutazione della scelta avviene solo ed esclusivamente in base a espressioni booleane, ovvero espressioni che possono essere vere o false. In particolare, l'istruzione if (o if-else) è l'istruzione più diffusa in tutti i linguaggi di programmazione. Essa è composta dalla parola riservata if seguita da una espressione booleana racchiusa tra parentesi tonde: se questa istruzione assume il valore true (Vero) viene eseguito il codice che segue la if (che può essere, eventualmente, un blocco) altrimenti quel codice non viene eseguito e si passa oltre. Per esempio:


if (a < b)
    System.out.println("Il minore dei due numeri e' a");



supposti a e b numeri, valuta se a è minore di b: se e solo se questo è vero viene stampata a video la stringa desiderata altrimenti il programma prosegue oltre. In questo esempio, poiché la riga da eseguire in base alla if è una sola, non è necessario l'uso delle parentesi graffe che comunque possono essere inserite se migliorano per voi la comprensibilità del codice senza ricevere errori in fase di compilazione o esecuzione del programma.

In alcuni casi abbiamo la necessità di eseguire una certa operazione se e solo se si verifica una condizione ed un'altra operazione se e solo se la condizione non si verifica. Questo può essere fatto in Java (come in molti linguaggi di programmazione) tramite l'istruzione if-else nella quale ciò che segue l'else viene eseguito se e solo se la condizione della if non si verifica. Ad esempio:

if (a < b)
    System.out.println("Il minore dei due numeri e' A");
else
    System.out.println("B e' minore o uguale ad A");


determina il minore tra due numeri e stampa a video un risultato appropriato in base ai dati ingresso. Le più comuni espressioni booleane utilizzate in Java comprendono gli operatori di minore e maggiore (< , >) di minore-uguale e maggiore-uguale (<= , >=) e gli operatori di uguaglianza, per i quali vale la pena spendere qualche parola. L'operatore di uguaglianza in Java è == (due simboli "uguale") da non confondersi con l'operatore di assegnamento = (uguale): confondere questi due operatori, cosa che purtroppo avviene spesso anche a programmatori non proprio novizi, è uno degli errori che chi si avvicina al linguaggio e alla programmazione in generale commette più spesso ed è uno degli errori di più difficile soluzione poiché, se i dati che usate nella condizione sono booleani non riceverete nessun errore da parte del compilatore ma molto probabilmente il vostro programma farà una cosa molto diversa da quella per cui era stato progettato.
Poiché abbiamo detto che sia la if che l'else possono essere seguiti da istruzioni o da blocchi di programma, dovrebbe essere chiaro che non vi è alcuna limitazione nello porre altre istruzioni if o if-else all'interno di questi. Questo modo di costruire il programma prende il nome di nidificazione e, in particolare, in questo caso parliamo di if annidati. Ad esempio:


if (a < b)
    System.out.println("Il minore dei due numeri e' A");
else
    if (b < a)
        System.out.println("Il minore dei due numeri e' B");
    else
        System.out.println("I due numeri sono uguali");


valuta esattamente qual è il minore tra due numeri e se essi sono uguali. Bisogna notare come non sia necessario inserire la condizione di uguaglianza ( if(a==b) ) nel nostro codice poiché la struttura nidificata ci permette di concludere correttamente quando i numeri sono uguali e quando non lo sono. Lo stesso risultato si può ottenere anche con tre if separate, ma non tutti i programmatori preferirebbero questo modo di procedere (tra i metodi semplici). Potete scaricare da qui la versione completa di questo esempio debitamente commentata.


Corso Java - Terza lezione: le strutture principali - IlSoftware.it