Sub..end sub
L'istruzione di controllo sub..end sub definisce una subroutine che può essere richiamata da un'istruzione call.
Sintassi:
Sub name [ ( paramlist )] statements end sub
Gli argomenti vengono copiati nella subroutine e, se i relativi parametri reali nell'istruzione call corrispondono a un nome di variabile, vengono copiati nuovamente quando si chiude la subroutine.
Se una subroutine presenta più parametri formali di quelli effettivi passati da un'istruzione call, i parametri extra vengono inizializzati su NULL e possono essere utilizzati come variabili locali all'interno della subroutine.
Argomenti:
Argomento | Descrizione |
---|---|
name | Il nome della subroutine. |
paramlist | Un elenco separato da virgole di nomi di variabili per i parametri formali della subroutine. Può essere utilizzato come qualsiasi variabile all'interno della subroutine. |
statements | Qualsiasi gruppo di una o più istruzioni dello script di Qlik Sense. |
Limiti:
-
Poiché sub è un'istruzione di controllo che termina con un punto e virgola o con un carattere di fine riga, ciascuna delle due clausole corrispondenti (sub e end sub) deve essere contenuta in una sola riga.
-
Quando si definisce una routine secondaria con Sub..end sub all'interno di un'istruzione di controllo, ad esempio if..then, è possibile richiamare la routine secondaria solo dall'interno della stessa istruzione di controllo.
Esempio 1:
Sub INCR (I,J)
I = I + 1
Exit Sub when I < 10
J = J + 1
End Sub
Call INCR (X,Y)
Esempio 2: - trasferimento parametri
Sub ParTrans (A,B,C)
A=A+1
B=B+1
C=C+1
End Sub
A=1
X=1
C=1
Call ParTrans (A, (X+1)*2)
Dall'esempio precedente risulta che localmente, all'interno della subroutine, A verrà inizializzato su 1, B verrà inizializzato su 4 e C verrà inizializzato su NULL.
Quando si chiude la subroutine, la variabile globale A otterrà 2 come valore (ricopiato dalla subroutine). Il secondo parametro reale “(X+1)*2” non verrà ricopiato dato che non si tratta di una variabile. Infine, la variabile globale C non verrà influenzata dalla chiamata della subroutine.