Ciao a tutti !
Proseguo con la serie di
tutorials di Actionscript 3.0 base.
Questa volta voglio introdurvi alle logiche condizionali.
Come vi sarà di certo già capitato, alle volte necessitiamo di fare delle scelte su quale codice fare eseguire da Flash.
Actionscript 3.0 permette di fare queste scelte applicando delle condizioni che se verificate eseguono un blocco di codice, altrimenti ne eseguono un altro.
In questo modo possiamo indirizzare Flash in una sequenza di codice scelta dai differenti eventi che possono presentarsi.
Gli operatori di logiche condizionali più utilizzati sono i seguenti:
- if
- else
- else if
- switch
Vediamo quando e come utilizzarli...
if
Supponiamo di avere una variabile di tipo String
Code:
var my_name:String='filippo';
e che vogliamo fare eseguire del codice a Flash in base al suo valore.
In questo caso dobbiamo dire a Flash di controllare prima il valore di my_name e poi di eseguire il corrispettivo codice.
Quindi:
Code:
if(my_name=='filippo')
{
trace('ok');
}
if lo dice la parola stessa che in inglese significa se. In questo modo diciamo a Flash di controllare un qualcosa. Cosa ? Quello che è scritto tra le parentesi tonde subito dopo la dichiarazione di if, infatti
(my_name=='filippo') dice a Flash il valore di my_name è uguale ( in Actionscript per usare l' operatore di uguaglianza all' interno di un if bisogna usare il simbolo == ) a 'filippo'
esegui il codice tra le parentesi graffe.
Quindi ottengo il seguente output:
ok
E se non fosse 'filippo' il valore di my_name, con il codice appena visto Flash non eseguirebbe alcun codice.
Come dire a Flash se il valore non è 'filippo' di eseguire dell' altro codice ?
Semplice ! Basta usare:
else
in questo modo:
Code:
var my_name:String='luca';
if(my_name=='filippo')
{
trace('ok');
}
else
{
trace('il valore di my_name non è filippo');
}
else, lo dice la parola stessa che in inglese significa ' altrimenti ', fa eseguire il codice tra le sue graffe se la condizione richiesta precedentemente con if non è vera.
Quindi in questo caso ottengo il seguente output:
il valore di my_name non è filippo
appunto perchè Flash prima verifica la condizione dell' if se è vera e non essendolo, salta il codice nelle graffe di if ed esegue il codice tra le graffe di else.
Vediamo un altro esempio con doppia condizione e l' operatore and logico &&.
Ho due variabili, una String ed una Boolean.
Ho una funzione che cambia il valore della variabile di tipo String e applico delle logiche condizionali if/else:
Code:
var your_name:String='philip';
var male:Boolean=true;
function cambiaNome():void
{
your_name='johnny';
}
if(your_name=='philip'&&male==true)
{
trace('la condizione è esatta');
}
else
{
trace('la condizione NON è esatta');
}
Chiaramente, se non chiamo la funzione, Flash esegue l' if, in quanto la verifica è vera.
NB: l' operatore && dice a Flash che c'è una seconda condizione, per rimanere sul pratico è come scrivere e.
Quindi ottengo questo output
la condizione è esatta
Se invece chiamo la funzione cambiaNome
Code:
var your_name:String='philip';
var male:Boolean=true;
cambiaNome();
function cambiaNome():void
{
your_name='johnny';
}
if(your_name=='philip'&&male==true)
{
trace('la condizione è esatta');
}
else
{
trace('la condizione NON è esatta');
}
ottengo questo output
la condizione NON è esatta
perchè Flash ha verificato come false la prima condizione contenuta tra le parentesi tonde dell' if e quindi esegue il codice di else.
Altro esempio con l' operatore or logico ||
Ho sempre 2 variabili, una di tipo String e l' altra di tipo Boolean
Code:
var fruit:String='apple';
var black:Boolean=false;
if(fruit=='banana'||black==false)
{
trace('almeno una delle 2 condizioni è esatta');
}
else
{
trace('nessuna delle 2 condizioni è esatta');
}
in questo caso, if si traduce così: se fruit è uguale a banana
oppure black è uguale a false allora esegui il codice. Quindi basta che sia vera una delle 2 condizioni delntro alle parentesi tonde di if.
Infatti ottengo il seguente output
almeno una delle 2 condizioni è esatta
e se ad esempio cambiassi il valore di black da false a true, allora neanche una delle 2 condizioni risulta esatta ed otterrei il seguente output:
nessuna delle 2 condizioni è esatta
else if
Questo comando spiega se stesso dal significato delle sue stesse parole: altrimenti se...
Facciamo un esempio, siamo dentro ad un ciclo e controlliamo il valore della variabile di controllo ( in questo caso i )
Code:
var max:int=20;
for(var i:int=0;i < max;i++)
{
if(i==0)
{
trace('la i ha valore '+i);
}
else if(i==3)
{
trace('la i ha valore '+i);
}
else
{
trace('la i non ha valore 0 e non ha valore 3');
}
}
utilizzo if per controllare se i ha valore 0, else if per controllare se i ha valore 3, else per controllare se il valore di i non è ne 0 ne 3.
In sostanza, rimanendo sul pratico:
se i è uguale a zero fai una cosa, se i è uguale a 3 fane un' altra e se i non è ne 0 e ne 3 allora fanne un' altra ancora.
Ottengo il seguente output:
la i ha valore 0
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
la i non ha valore 0 e non ha valore 3
switch
Questa istruzione, analogamente a if che abbiamo visto, crea una struttura ramificata e ne verifica le condizioni eseguendo solo quelle che risultano vere ( true ).
Code:
var new_name:String='filippo';
switch(new_name)
{
case 'luca':
trace(' la variabile new_name non ha valore luca');
break;
case 'filippo':
trace('la variabile new_name ha valore filippo');
break;
case 'giacomo':
trace('la variabile new_name non ha valore giacomo');
break;
}
Ho creato una variabile di tipo String che ha valore 'filippo'.
switch(new_name) è come dire controlla(new_name)
case, se è il caso è 'luca'
trace.... esegui questo codice
break dice a Flash di ignorare il resto del codice una volta che sia stato trovato il caso true
Infatti ottengo il seguente output:
la variabile new_name ha valore filippo
gli altri comandi non vengono eseguiti.
Presto pubblicherò un tutorial su queste logiche condizionali applicato alla costruzione e gestione di un menu e della timeline.
Stay tuned !