Differenze tra le versioni di "SELECT CASE...CASE...END SELECT"

Da Gambas-it.org - Wikipedia.
 
 
(18 versioni intermedie di 4 utenti non mostrate)
Riga 1: Riga 1:
  SELECT CASE variabile
+
  '''SELECT CASE''' variabile
   CASE ''variabile(1)''
+
   '''CASE''' ''variabile(1)''
  <<vostro codice 1>>
+
    <<vostro codice 1>>
   CASE ''variabile(2)''
+
   '''CASE''' ''variabile(2)''
  <<vostro codice 2>>
+
    <<vostro codice 2>>
   CASE ''variabile(3)''
+
   '''CASE''' ''variabile(3)''
   <<vostro codice 3>>
+
    <<vostro codice 3>>
  END SELECT  
+
   '''CASE ELSE''' oppure soltanto '''DEFAULT'''
 +
    <<vostro codice 4>>
 +
  '''END SELECT'''
 
''' Esegue del codice previa verifica della condizione '''
 
''' Esegue del codice previa verifica della condizione '''
----
 
  
 +
''Spiegazione''
  
''Spiegazione''
 
 
Ogni valore che assume variabile esegue il codice successivo alla verifica.
 
Ogni valore che assume variabile esegue il codice successivo alla verifica.
Questa funzione è simile a  
+
<BR>Questa funzione è simile a [[IF...THEN...ELSE...ENDIF|If...Then...Else...Endif]] con la differenza che è più immediata e pulita la lettura del codice, e prevede un controllo più stretto sul range di valori.
 +
<BR>Inoltre è possibile gestire il flusso di dati in modo che in caso non sia soddisfatta nessuna condizione il sistema esegua qualche cosa, questo è possibile tramite '''CASE ELSE''' o '''DEFAULT''' da solo.
  
''Esempio 1'' - '''Verifica condizionale immediata'''
+
''Esempio 1'' - '''Verifica pressione di un tasto'''
 
+
'''SELECT CASE''' key.Code
  IF variabile1 = variabile2 THEN <<vostro codice>>
+
  '''CASE''' key.Del
 +
    Message.Info("premuto il tasto DEL")
 +
  '''CASE''' key.F1
 +
    Message.Info("premuto il tasto F1")
 +
  '''DEFAULT'''
 +
    Message.Info("tasto non riconosciuto")
 +
'''END SELECT'''
 +
Se vogliamo utilizzare '''CASE ELSE''':
 +
'''SELECT CASE''' key.Code
 +
  '''CASE''' key.Del
 +
    Message.Info("premuto il tasto DEL")
 +
  '''CASE''' key.F1
 +
    Message.Info("premuto il tasto F1")
 +
  '''CASE ELSE'''
 +
    Message.Info("tasto non riconosciuto")
 +
  '''END SELECT'''
 
''Spiegazione''
 
''Spiegazione''
  
Se il valore di variabile1 è uguale a variabile2 allora esegui <<vostro codice>>.
+
Ad ogni pressione di un tasto il sistema verifica a quale codice della tastiera corrisponde e si comporta di conseguenza. Per provare l'esempio è sufficiente scrivere il codice sopra riportato all'interno di una TextBox.
  
In questo caso <<vostro codice>> sarà un'istruzione semplice ed immediata (un assegnazione di un valore ad una variabile, un uscita dal programma, una chiamata di un funzione).
 
  
 +
Per associare lo stesso codice a più situazioni, è possibile definirle nella stessa istruzione CASE, separando ogni valore da una '''virgola''':
  
''Esempio 2'' - '''Verifica condizionale complessa'''
+
Esempio:
 +
'''SELECT CASE''' key.Code
 +
  '''CASE''' key.Del
 +
    Message.Info("premuto il tasto DEL")
 +
  '''CASE''' key.F1, key.F2, Key.Ins
 +
    Message.Info("premuto il tasto F1 oppure F2 oppure Ins")
 +
  '''DEFAULT'''  
 +
    Message.Info("tasto non riconosciuto")
 +
'''END SELECT'''  
 +
Come si può notare dall'esempio, nel secondo CASE sono stati definiti tre valori (F1, F2 e Ins); alla pressione dei tasti corrispondenti verrà eseguita la stessa istruzione.
  
  IF variabile1 = variabile2 THEN
+
Per associare lo stesso codice a più situazioni che insistono in un ambito ben determinato di valori, allora si utilizzerà '''TO''':
<<vostro codice>>
+
  ENDIF
+
Esempio:
 +
  '''SELECT CASE''' variabile
 +
  '''CASE''' variabile1 '''TO''' variabile2
 +
    Message.Info("rientra nell'ambito da variabile1 a variabile 2")
 +
  '''CASE''' variabile3 '''TO''' variabile4
 +
    Message.Info("rientra nell'ambito da variabile3 a variabile 4")
 +
  '''END SELECT'''
  
''Spiegazione''
+
----
  
Se il valore di variabile1 è uguale a variabile2 allora esegui <<vostro codice>>.
 
  
In questo caso <<vostro codice>> può essere anche di natura complessa (cicli For..Next, ulteriori istruzioni If..Then, ecc.).
+
Le modalità di verifica con la ''virgola'' e con il '''TO''' possono essere anche utilizzate contestualmente nel medesimo CASE.  
L'istruzione ENDIF comunica al sistema la "chiusura" della verifica condizionale.
 
  
 +
Esempio:
 +
'''SELECT CASE''' variabile
 +
  '''CASE''' 2, 8 '''TO''' 10'''
 +
    Print "Primo caso"
 +
  '''CASE''' 16 '''TO''' 17''', 14
 +
    Print "Secondo caso"
 +
  '''CASE''' 20 '''TO''' 25''',''' 30 '''TO''' 35
 +
    Print "Terzo caso"
 +
  '''CASE''' 40 '''TO''' 45''',''' 48''',''' 50 '''TO''' 55''',''' 58
 +
    Print "Quarto caso"
 +
  '''CASE ELSE'''
 +
    Print "Nulla"
 +
'''END SELECT'''
  
''Esempio 3'' - '''Verifica condizionale multipla'''
 
  
IF variabile1 = variabile2 THEN
+
----
<<vostro codice 1>>
 
ELSE
 
<<vostro codice 2>>
 
ENDIF
 
  
''Spiegazione''
 
  
Se il valore di variabile1 è uguale a variabile2 allora esegui <<vostro codice 1>>, altrimenti esegui <<vostro codice 2>>.
+
Nella verifica, altresì, potrà essere utilizzato anche l'operatore '''LIKE''': <SUP>&#91;[[#Note|nota 1]]&#93;</sup>
 +
Public Sub Main()
 +
 +
  Dim s As String = "abcg"
 +
 
 +
  '''Select Case''' s
 +
    Case "aaa"
 +
      Print "aaa"
 +
    Case <FONT Color=red>Like</font> "abc*"
 +
      Print "like !"
 +
  '''End Select'''
 +
 
 +
End
  
  
Le possibile scelte condizionali che offre l’istruzione IF…THEN sono:
 
  
'''=''' uguale (variabile1 = variabile2)
+
----
 
+
=Note=
'''>''' maggiore (variabile1 > variabile2)
+
[1] Sull'uso dell'operatore "Like" vedere anche questa discussione: https://lists.gambas-basic.org/pipermail/user/2013-March/043458.html
 
 
'''<''' minore (variabile1 < variabile2)
 
 
 
'''<>''' diverso (variabile1 <> variabile2)
 
 
 
'''>=''' maggiore o uguale (variabile1 >= variabile2)
 
 
 
'''<=''' minore o uguale (variabile1 <= variabile2)
 

Versione attuale delle 15:53, 6 lug 2024

SELECT CASE variabile
 CASE variabile(1)
   <<vostro codice 1>>
 CASE variabile(2)
   <<vostro codice 2>>
 CASE variabile(3)
   <<vostro codice 3>>
 CASE ELSE oppure soltanto DEFAULT
   <<vostro codice 4>>
END SELECT 

Esegue del codice previa verifica della condizione

Spiegazione

Ogni valore che assume variabile esegue il codice successivo alla verifica.
Questa funzione è simile a If...Then...Else...Endif con la differenza che è più immediata e pulita la lettura del codice, e prevede un controllo più stretto sul range di valori.
Inoltre è possibile gestire il flusso di dati in modo che in caso non sia soddisfatta nessuna condizione il sistema esegua qualche cosa, questo è possibile tramite CASE ELSE o DEFAULT da solo.

Esempio 1 - Verifica pressione di un tasto

SELECT CASE key.Code
  CASE key.Del
    Message.Info("premuto il tasto DEL")
  CASE key.F1
    Message.Info("premuto il tasto F1")
  DEFAULT 
    Message.Info("tasto non riconosciuto")
END SELECT

Se vogliamo utilizzare CASE ELSE:

SELECT CASE key.Code
  CASE key.Del
    Message.Info("premuto il tasto DEL")
  CASE key.F1
    Message.Info("premuto il tasto F1")
  CASE ELSE 
    Message.Info("tasto non riconosciuto")
END SELECT

Spiegazione

Ad ogni pressione di un tasto il sistema verifica a quale codice della tastiera corrisponde e si comporta di conseguenza. Per provare l'esempio è sufficiente scrivere il codice sopra riportato all'interno di una TextBox.


Per associare lo stesso codice a più situazioni, è possibile definirle nella stessa istruzione CASE, separando ogni valore da una virgola:

Esempio:

SELECT CASE key.Code
  CASE key.Del
    Message.Info("premuto il tasto DEL")
  CASE key.F1, key.F2, Key.Ins
    Message.Info("premuto il tasto F1 oppure F2 oppure Ins")
  DEFAULT 
    Message.Info("tasto non riconosciuto")
END SELECT 

Come si può notare dall'esempio, nel secondo CASE sono stati definiti tre valori (F1, F2 e Ins); alla pressione dei tasti corrispondenti verrà eseguita la stessa istruzione.

Per associare lo stesso codice a più situazioni che insistono in un ambito ben determinato di valori, allora si utilizzerà TO:

Esempio:

SELECT CASE variabile
  CASE variabile1 TO variabile2
    Message.Info("rientra nell'ambito da variabile1 a variabile 2")
  CASE variabile3 TO variabile4
    Message.Info("rientra nell'ambito da variabile3 a variabile 4")
END SELECT 


Le modalità di verifica con la virgola e con il TO possono essere anche utilizzate contestualmente nel medesimo CASE.

Esempio:

SELECT CASE variabile
  CASE 2, 8 TO 10
    Print "Primo caso"
  CASE 16 TO 17, 14 
    Print "Secondo caso"
  CASE 20 TO 25, 30 TO 35
    Print "Terzo caso"
  CASE 40 TO 45, 48, 50 TO 55, 58
    Print "Quarto caso"
  CASE ELSE
    Print "Nulla"
END SELECT




Nella verifica, altresì, potrà essere utilizzato anche l'operatore LIKE: [nota 1]

Public Sub Main()

 Dim s As String = "abcg"
 
 Select Case s
   Case "aaa"
     Print "aaa"
   Case Like "abc*"
     Print "like !"
 End Select
  
End



Note

[1] Sull'uso dell'operatore "Like" vedere anche questa discussione: https://lists.gambas-basic.org/pipermail/user/2013-March/043458.html