Sub..end sub
La sentencia de control sub..end sub define una subrutina que puede invocarse desde una sentencia call.
Sintaxis:
Sub name [ ( paramlist )] statements end sub
Los argumentos se copian en la subrutina y, si el parámetro real correspondiente en la sentencia call es un nombre de una variable, se copia nuevamente al salir de la subrutina.
Si una subrutina tiene parámetros más formales que los parámetros reales que pasan por una sentencia call, los parámetros adicionales se inicializarán en NULL y se podrán usar como variables locales dentro de la subrutina.
Argumentos:
Argumento | Descripción |
---|---|
name | El nombre de la subrutina. |
paramlist | Una lista separada por comas con los nombres de variables de los parámetros formales de la subrutina. Estos pueden utilizarse como cualquier variable dentro de la subrutina. |
statements | Es cualquier grupo de una o varias sentencias de script de Qlik Sense. |
Limitaciones:
-
Dado que la sentencia sub es una sentencia de control y como tal finaliza con un punto y coma o un final de línea, cada una de sus dos cláusulas (sub y end sub) no debe superar el límite de una línea.
-
Cuando define una subrutina con Sub..end sub dentro de una sentencia de control if..then, solo puede llamar a la subrutina desde dentro de la misma sentencia de control.
Ejemplo 1:
Sub INCR (I,J)
I = I + 1
Exit Sub when I < 10
J = J + 1
End Sub
Call INCR (X,Y)
Ejemplo 2: - transferencia de parámetros
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)
El resultado de lo anterior será que, localmente, dentro de la subrutina, A se inicializará en 1, B se inicializará en 4 y C se inicializará en NULL.
Al salir de la subrutina, la variable global A obtendrá 2 como valor (copiado de la subrutina). El segundo parámetro real “(X+1)*2” no será copiado puesto que no es una variable. Por último, la variable global C no se verá afectada por la llamada de la subrutina.