Non sei loggato | Register | Login

Strutture di controllo Aggiungi

Tutorials / Programmazione

Requisiti

  • Malleabilità mentale :)
  • 10 minuti di tempo disponibili :)
  • Conoscenze minime di programmazione (se conoscete un termine più riduttivo di minimo, sostituitelo pure ;)

Introduzione

Quello che stò per scrivere è una panoramica generale comune a tutti i linguaggi di programmazione (tipo ActionScript, PHP, Java, ecc...); in questo caso l'argomento verrà trattato con esempi scritti in ActionScript ( che si può considerare il nipotino di Java ;).

If...Else (e operatori condizionali)

Questa istruzione di selezione è la più "utilizzata" di tutte visto che ci permette di cambiare "percorso" al nostro programma ( e quindi di renderlo "ramificato").

  1. condizione=true;
  2. if (condizione) {
  3.         trace("La condizione è vera");
  4. } else {
  5.         trace("La condizione è falsa");
  6. }

Come potete notare questo ci permette di esaminare la condizione e di comportarci di conseguenza. Infatti se la condizione è vera, nella nostra finestra di debug comparirà la scritta "La condizione è vera" (è il nostro caso) altrimenti se la condizione è falsa comparirà "La condizione è falsa".
Un applicazione utile può essere quella di mettere in una variabile il massimo valore di due variabili (supponiamo che i due valori siano diversi), ad esempio:

  1. numero1=10;
  2. numero2=5;
  3. if (numero1>numero2) {
  4.         max=numero1;
  5. } else {
  6.         max=numero2;
  7. }

Come possiamo notare la variabile max conterrà la variabile più grande, quindi il massimo tra numero1 e numero2. Ovviamente possiamo annidare più if...else a nostra discrezione. Un altro modo per eseguire la stessa operazione dello scriptino di prima stà nell'usare un operatore condizionale di questo tipo:

  1. numero1=10;
  2. numero2=5;
  3. max=numero1>numero2?(numero1):(numero2);

Ovviamente la possibilità di scelta tra questi due metodi stà a voi (in questa applicazione io preferisco usare l'operatore condizionale).
Come ho accennato prima si possono annidare più if o else if, questo per algoritmi leggermente più "contorti". Volendo migliorare il programma di prima (che non funzionava correttamente se i due numeri erano uguali) possiamo scrivere il seguente codice:

  1. numero1=10;
  2. numero2=5;
  3. if (numero1==numero2) {
  4.         trace("I due numeri sono uguali");
  5. } else if (numero1>numero2) {
  6.         max=numero1;
  7. } else {
  8.         max=numero2;
  9. }

La stessa cosa poteva essere fatta con due operatori condizionali annidati, ma in questo caso la cosa non è molto conveniente sia per la comprensione del codice e sia per la difficoltà di annidare due operatori condizionali (con quei punti di domanda e i due punti alla fine si fa solo confusione :P), quindi consiglio di usarli solo nella applicazioni semplici (tipo calcolare il max tra due variabili).
Nella condizione hanno molta importanza gli operatori logici quali l'AND ( simbolo &&), l'OR ( simbolo || ) e il NOT ( simbolo ! ) che diventano utili quando nella condizione devono essere soddisfatte più cose (ad esempio che una variabile sia uguale a 10 e l'altra a 5, in questo caso si userà l'AND).

Switch...Case...Default

Questo blocco di istruzioni possono essere pensate come tanti if di seguito. Facciamo subito un esempio (che alla fine è alla base di tutto ;):

  1. switch (numero) {
  2.         case 1:
  3.                 trace ("il numero è Uno");
  4.                 break;
  5.         case 2:
  6.                 trace ("il numero è Due");
  7.                 break;
  8.         case 3:
  9.                 trace ("il numero è Tre");
  10.                 break;
  11.         default:
  12.                 trace ("il numero non è nè Uno, Due, Tre")
  13. }

Questo blocco si potrebbe fare anche con una serie di if annidati:

  1. if (numero==1) trace("il numero è Uno");
  2. else if (numero==2) trace ("il numero è Due");
  3. else if (numero==3) trace("il numero è Tre");
  4. else trace("il numero non è nè Uno, Due, Tre");

In questo caso lo switch...case...default risulta più comprensibile e facilmente modificabile. L'istruzione break serve per uscire dall'istruzione di controllo (quindi si esce dallo switch). Ipotizzando che il numero sia 1, senza il break il programma controllerebbe pure le altre uguaglianze, mentre trovandosi un break esce dallo switch (velocizzando l'esecuzione del programma). Ci sono dei casi in cui il break può anche non essere utilizzato, ad esempio quando dobbiamo trattare più casi allo stesso modo.

Do...While e While

Queste istruzioni ho deciso di trattarle insieme visto che si differenziano solo per una piccola cosetta (non meno importante). Facciamo subito un esempio si While:

  1. i=0;
  2. while (i<=10) {
  3.         trace(i++);
  4. }

Questo piccolo frammento di codice conta i numeri dallo 0 al 10. Come potete vedere c'è una fase in cui inizializzo la variabile "i" e una in cui la incremento finchè è minore uguali a 10. Questo ciclo, appunto, fa assumere alla variabile "i" tutti i numeri interi tra 0 e 10 (inclusi). Se volessimo fare la stessa cosa con il Do...while faremo così:

  1. i=0
  2. do {
  3.         trace(i++)
  4. } while (i<=10);

Voi direte, ma praticamente sono due sintassi diverse dello stesso comando? E io vi rispondo : certo che no... adesso vi spiego il perchè. La differenza tra le due istruzioni stà nel fatto che nel Do...While la condizione viene controllata solo dopo l'esecuzione dell'istruzione (che di conseguenza viene eseguita almeno una volta), mentre nel While il discorso si inverte (ma và? :) Un utile applicazione del Do...While in Java e Co. stà nel controllo del input (da tastiera) dell'utente, tutto questo perchè l'input deve essere richiesto almeno una volta (e poi controllato).

For...To

Questa è l'istruzione che io uso di più (mi stà più simpatica ed è molto più corta da scrivere ehehe) e ha lo stesso scopo delle altre due precedenti istruzioni, ossia quello di eseguire un ciclo finchè una condizione si è verificata.

  1. for (var i=0;i<=10;i++) trace(i);

Come potete notare in un unica riga ho inizializzato la variabile , ho messo la condizione, incrementato la "i" e visualizzata. L'unica attenzione stà nel fatto di non modificare la variabile "i" durante il ciclo, perchè molto probabilmente andremo ad incorrere su un ciclo infinito (che traducendo in termini pratici...si pianta tutto ehehe ;) Per accennare la funzione dell'istruzione continue facciamo un altro esempio:

  1. for (var i=0;i<=10;i++) {
  2.         if (i==5) continue;
  3.         trace(i);
  4. }

Come possiamo notare se "i" è uguale a 5 eseguiamo l'istruzione continue. Questo ci permette di uscire dall'iterazione corrispondente ma non dal ciclo (e di conseguenza si salta il conteggio di 5 facendolo poi riprendere dal 6). Se sostituiamo il continue con il break, faremo in modo che il conteggio si blocchi al numero 5 (visualizzando i numero 0 1 2 3 4).
Volendo si può fare a meno di queste istruzioni e modificare opportunamente la condizione, ad esempio:

  1. for (var i=0;i<=10;i++) {
  2.         if (i!=5) trace(i);
  3. }

Otterremo lo stesso risultato dello script precedente (quindi abbiamo sostituito il continue). Mentre se volessimo sostituire il break faremo così:

  1. for (var i=0;i<=10 && i!=5;i++) {
  2.         trace(i);
  3. }

Come potete notare lo script che ho appena scritto non è molto "intelligente" infatti basterebbe mettere come condizione i<5, ma visto che gli esempi servono per capire... :)

Tutte le cose belle finiscono prima o poi

Bene eccoci giunti alla fine del tutorial. Come avete notato le nozioni non sono molto complicate e essendo correlate da dei semplici esempi si trasformano in nozioni quasi banali. Ovviamente saper programmare non significa sapere queste cose, ma saperle applicare nel modo più corretto ed efficace possibile.
Inoltre nel caso dell'ActionScript occorre sapere pure altre istruzioni (gotoAndPlay(),LoadVariable(),XML,ecc...) per poter fare programmi che abbiano una certa utilità. La stessa cosa vale per Java dove occorre per forza sapere le API( per fare interfacce grafiche, leggere dati su disco, interfacciarsi a protocolli di rete, ecc...).

Daniele Simonin 3 September 2005 alle 11:10 Trackback URI

Scrivi un commento

Tags di formattazione:










* Sono ammessi solo commenti contenenti opinioni, correzioni e ogni forma di supporto al tutorial; è quindi vietato porre quesiti personali.

Feed

infoPillole (by Wikipedia)

Ultimi commenti

Calendario

March 2010
M T W T F S S
« Feb    
1234567
891011121314
15161718192021
22232425262728
293031  

Archivio

Categorie

Tutorials casuali

Ultime news

Progetti

Alcuni miei lettori

Have a break