Utilizzare i loop
Obiettivi di apprendimento
Al completamento di questa unità, sarai in grado di:
- Distinguere tra loop while e do-while.
- Utilizzare gli operatori di incremento e decremento.
Nel nostro esempio della classe Teatime, abbiamo preparato una tazza di tè da condividere con gli amici. Ma cosa succede se dobbiamo servire il tè a un gruppo di 100 persone? Dobbiamo ripetere gli stessi passaggi diverse volte fino a quando ognuno ha ricevuto la sua tazza di tè. Sembrerebbe che ci sia bisogno di un bel po' di codice ridondante, non ti pare? È qui che i loop vengono in aiuto.
Un loop è un blocco di codice che viene eseguito ripetutamente fino a quando una data condizione non viene soddisfatta. Tornando al codice della classe Teatime, vediamo quali sono i passaggi da ripetere:
Add Tea and Sugar to Teacup Pour Tea in Teacup Put 1 teaspoon of Sugar in Teacup Stir Tea in Teacup Serve Tea to a Friend
I passaggi che devono essere ripetuti possono essere aggiunti a un loop. In Apex sono disponibili tre modi di ripetere ciclicamente istruzioni: i loop while
, do-while
e for
. Per ora ci concentreremo sui loop while
e do-while
. Come avrai capito dal nome, i loop while
e do-while
sono molto simili. In entrambi i casi, bisogna verificare che una condizione specifica sia soddisfatta. La differenza sta nel momento in cui la condizione viene verificata. Nei loop while
, la condizione viene verificata prima che il loop inizi, mentre nei loop do-while
viene verificata dopo che le istruzioni all'interno del loop sono state eseguite.
Ti sembra un dettaglio insignificante? In realtà, la differenza è abbastanza significativa.
Mettiamola così: un loop do-while
viene sempre eseguito almeno una volta, mentre, a seconda della condizione, un loop while
potrebbe non essere eseguito affatto.
Loop while
Un loop while
inizia con la verifica della condizione: se questa restituisce true, vengono eseguite delle azioni, se invece restituisce false, il loop si ferma.
Ecco la sintassi:
While(condition) { //run this block of code }
Applichiamo un loop while
al codice della nostra classe Teatime.
- Nella Developer Console, fai clic su Debug | Open Execute Anonymous Window (Debug | Apri finestra di esecuzione anonima).
- Copia il codice seguente e incollalo nella finestra Enter Apex Code (Inserisci codice Apex).
//Declare an Integer variable called totalGuests and set it to 100 Integer totalGuests = 100; //Declare an Integer variable called totalAmountSugar and set it to 159 (number of teaspoons in a bag of sugar). Integer totalAmountSugar = 159; //Declare an Integer variable called totalAmountTea and set it to 35 (number of teabags). Integer totalAmountTea = 35; //Loop: Add a teaspoon of sugar and one tea bag to a tea cup. Serve until there is no sugar or tea left. While(totalGuests > 0) { System.debug(totalGuests + ' Guests Remaining'); //check ingredients if(totalAmountSugar == 0 || totalAmountTea == 0) { System.debug('Out of ingredients! Sugar: ' + totalAmountSugar + ' Tea: ' + totalAmountTea); break; //ends the While loop } //add sugar totalAmountSugar--; //add tea totalAmountTea--; //guest served totalGuests--; }
- Seleziona la casella di controllo Open log (Apri registro) e fai clic su Execute (Esegui). Si apre la finestra Execution Log (Registro di esecuzione), in cui è visualizzato il risultato dell'esecuzione del codice.
- Seleziona la casella di controllo Debug Only (Solo debug) nella parte bassa della finestra.
Il segno --
non è un errore di ortografia. Si tratta di un operatore di decremento postfisso. È un modo rapido per dire "sottrai un numero da questo valore". Se totalAmountSugar
è uguale a 159, viene decrementato in modo che totalAmountSugar
sia uguale a 158. L'operatore di incremento postfisso ++
opera in modo opposto, aggiungendo un numero al valore.
In pratica, cosa succede? Ricorda che il nostro obiettivo principale è servire il tè a 100 ospiti. Ogni volta che serviamo un ospite, sottraiamo una dose di ciascun ingrediente (totalAmountSugar
e totalAmountTea
) e un ospite (totalGuests
). Quando il valore di totalAmountSugar
o di totalAmountTea
diventa 0 (riga 15) OPPURE il valore di totalGuests
(riga 12) diventa 0, il loop si ferma e nessuno viene più servito.
Vediamo come funziona il loop do-while
.
Loop do-while
Quando si utilizza un loop do-while
, il codice viene eseguito una volta prima della verifica della condizione.
Un loop do-while
inizia con l'esecuzione di un'operazione e, successivamente, la condizione viene verificata. Se la condizione restituisce true, l'operazione viene eseguita di nuovo, se invece restituisce false, il loop si ferma.
Dai un'occhiata alla sintassi:
Do { //run this block of code } while(condition);
- Nella Developer Console, fai clic su Debug | Open Execute Anonymous Window (Debug | Apri finestra di esecuzione anonima).
- Copia il codice seguente e incollalo nella finestra Enter Apex Code (Inserisci codice Apex).
//Declare an Integer variable called totalGuests and set it to 100 Integer totalGuests = 100; //Declare an Integer variable called totalAmountSugar and set it to 159 (number of teaspoons in a bag of sugar). Integer totalAmountSugar = 159; //Declare an Integer variable called totalAmountTea and set it to 35 (number of teabags). Integer totalAmountTea = 35; do { //deduct sugar serving totalAmountSugar--; //deduct tea serving totalAmountTea--; //deduct guest totalGuests--; System.debug(totalGuests + ' Guests Remaining!'); //check ingredients if(totalAmountSugar == 0 || totalAmountTea == 0) { System.debug('Out of ingredients!'); break; //ends the While loop } } while(totalGuests > 0);
- Seleziona la casella di controllo Open log (Apri registro) e fai clic su Execute (Esegui). Si apre la finestra Execution Log (Registro di esecuzione), in cui è visualizzato il risultato dell'esecuzione del codice.
- Seleziona la casella di controllo Debug Only (Solo debug) nella parte bassa della finestra.
Hai dichiarato delle variabili, istanziato dei valori, creato liste e usato loop per lavorare su dati ciclicamente. Complimenti! Hai completato l'introduzione ad Apex e sei sulla buona strada per scoprire di più sulla programmazione.