Quando sei di corsa ed entri nei bagni dell’Autogrill, hai pochi secondi per decidere qual è la porta giusta, e non è il caso di sbagliare!
Stessa situazione la troviamo quando scriviamo il nostro codice.
In Tcl ci viene in aiuto il comando switch che permette di operare una scelta tra più possibilità.
Il confronto avviene solo ed esclusivamente tra stringhe.
Quando una certa stringa da confrontare corrisponde con una delle diverse stringhe di controllo, allora viene eseguito il relativo codice associato.
Di norma è bene scegliere la struttura di controllo
switchal posto di quellaif-then-elsequando abbiamo un numero abbastanza consistente di possibilità su cui lavorare.
Vediamo la sintassi del comando switch.
switch ?opzioni? stringa_da_confrontare {
stringa_di_controllo_1 {
codice_blocco_1
}
stringa_di_controllo_2 {
codice_blocco_2
}
...
stringa_di_controllo_n {
codice_blocco_n
}
default {
codice_blocco_default
}
}
Alcune note per punti:
- Le opzioni subito dopo il comando
switchsono facoltative. - Viene eseguito soltanto il blocco di codice relativo alla prima stringa di controllo che corrisponde alla stringa da confrontare.
- Se tutti i confronti con le stringhe di controllo falliscono, allora viene eseguito il codice relativo alla stringa
defaultse questa è presente. - Se il blocco relativo alla stringa
defaultnon è stato previsto, e tutti i confronti falliscono, allora il comandoswitchrestituisce una stringa vuota"". - Se al posto del codice di un blocco inseriamo il carattere
-(trattino), allora nel caso che la relativa stringa di controllo corrisponda alla stringa da confrontare, l’interprete passa alla valutazione del blocco successivo.
Usare le opzioni
Come abbiamo scritto più sopra, le opzioni sono facoltative, ma, se usate, ci permettono di definire la modalità di interpretazione delle stringhe di controllo.
Vediamo alcune opzioni:
- se utilizziamo l’opzione
-glob, l’interprete utilizzerà le regole standard come quella relativa al carattere asterisco*che ci permette di confrontare, per esempio, le stringhe “pluto”, “plutone” o “pluto 2” e trovare una corrispondenza positiva con la stringa “pluto*”; - se utilizziamo l’opzione
-exact, la stringa di controllo dovrà corrispondere esattamente alla stringa da confrontare; - se per il confronto utilizziamo l’opzione
-regexp, l’interprete utilizzerà le regole definite dalle Regular Expressions che vedremo più avanti.
Esempi
Vediamo uno stesso esempio una volta con l’opzione -glob ed una con l’opzione -exact.
Primo esempio
set x "pluto 2"
switch -glob $x {
"pippo" {
puts "The value of x is $x."
}
"pluto*" {
puts "The value of x is $x."
}
"paperino" {
puts "The value of x is $x."
}
default {
puts "The value of x is not managed."
}
}
---
The value of x is pluto 2.
Secondo esempio
set x "pluto 2"
switch -exact $x {
"pippo" {
puts "The value of x is $x."
}
"pluto*" {
puts "The value of x is $x."
}
"paperino" {
puts "The value of x is $x."
}
default {
puts "The value of x is not managed."
}
}
---
The value of x is not managed.
Nel prossimo articolo vedremo la struttura di controllo iterativa while.
