Sub..end sub
De besturingsopdracht sub..end sub geeft een subroutine aan die vanuit een call-opdracht kan worden aangeroepen.
Syntaxis:
Sub name [ ( paramlist )] statements end sub
De argumenten worden in de subroutine gekopieerd en, als de corresponderende parameter in de call-opdracht een variabelenaam is, weer teruggekopieerd bij het verlaten van de subroutine.
Als een subroutine meer formele parameters heeft dan er aan daadwerkelijke parameters door een call-opdracht worden doorgegeven, worden de overtollige parameters op NULL ingesteld en kunnen ze als lokale variabelen binnen de subroutine worden gebruikt.
Argumenten:
Argument | Beschrijving |
---|---|
name | De naam van de subroutine. |
paramlist | Een door komma's gescheiden lijst variabelen voor de formele parameters van de subroutine. Deze kunnen worden gebruikt als willekeurige variabelen binnen de subroutine. |
statements | Een willekeurige groep van een of meer Qlik Sense-scriptopdrachten. |
Beperkingen:
-
Omdat de instructie sub een besturingsopdracht is en dus wordt afgesloten door een puntkomma of het einde van een regel, mag geen van de twee mogelijke clausules (sub en end sub) de regelgrens overschrijden.
-
Als u een subroutine definieert met Sub..end sub binnen een besturingsopdracht, bijvoorbeeld if..then, kunt u de subroutine alleen oproepen binnen dezelfde besturingsopdracht.
Voorbeeld 1:
Sub INCR (I,J)
I = I + 1
Exit Sub when I < 10
J = J + 1
End Sub
Call INCR (X,Y)
Voorbeeld 2: - parameteroverdracht
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)
Het resultaat van het bovenstaande is dat lokaal, binnen de subroutine, A wordt geïnitialiseerd op 1, B op 4 en C op NULL.
Bij het verlaten van de subroutine krijgt de globale variabele A de waarde 2 (teruggekopieerd van de subroutine). De tweede werkelijke parameter “(X+1)*2” wordt niet teruggekopieerd omdat dit geen variabele is. Tot slot verandert de globale variabele C niet door de aanroep van de subroutine.