Gracias por los comentarios

Este artículo ha sido traducido automáticamente. (Aviso legal)

Estructuras de control

El lenguaje de funciones de extensión proporciona las sentencias habituales para controlar la ejecución del programa.

  • Si, entonces, si no
  • Mientras haga y repita hasta
  • Para numérico
  • Descanso
  • Ir a

Si, entonces, si no

Si las sentencias seleccionan bloques de sentencias para ejecutarlas en función de una o más condiciones. Hay tres formas:

Si es así, Formulario

if expression then statements to execute if expression is not false or nil end

Si es así, Formulario

if expression then statements to execute if expression is not false or nil else statements to execute if expression is false or nil end

Si es así, elseif else Form

if expression1 then statements to execute if expression1 is not false or nil elseif expression2 then statements to execute if expression2 is not false or nil . . . else statements to execute if all expressions are false or nil end

Ejemplo:

if headers[name] then local next_value_index = #(headers[name]) + 1 headers[name][next_value_index] = value else headers[name] = {name .. ":" .. value} end

Nota:

  • La expresión no está entre paréntesis como ocurre en C y Java.
  • No hay ningún equivalente a la sentencia del conmutador C/Java. Tienes que usar una serie de sentencias if elseif para hacer lo equivalente.

Mientras haga y repita hasta

Las sentencias while y repeat proporcionan bucles controlados por una expresión.

while expression do statements to execute while expression is not false or nil end repeat statements to execute until expression is not false or nil until expression

Ejemplo de mientras:

local a = {1, 2, 3, 4} local sum, i = 0, 1 -- multiple assignment initializing sum and i while i <= #a do -- check if at the end of the array sum = sum + a[i] -- add array element with index i to sum i = i + 1 -- move to the next element end

Ejemplo de repetición:

sum, i = 0, 1 -- multiple assignment initializing sum and i repeat sum = sum + a[i] -- add array element with index i to sum i = i + 1 -- move to the next element until i > #a -- check if past the end of the array

Por supuesto, es posible escribir un bucle que no termine, por ejemplo, si se omite la sentencia i = i + 1 en cualquiera de estos ejemplos. Cuando se ejecuta una función de este tipo, NetScaler detectará que la función no se completó en un tiempo razonable y la eliminará con un error de ejecución:

Cpu limit reached. Terminating extension execution in [[string "function extension function..."]]: line line-number.

se indicará en /var/log/ns.log.

Para numérico

Hay dos tipos de bucles. El primero es el numérico for, que es similar al uso habitual de la sentencia for en C y Java. La sentencia numérica for inicializa una variable, comprueba si la variable ha superado un valor final y, si no, ejecuta un bloque de sentencias, incrementa la variable y se repite. La sintaxis del bucle numérico for es:

for variable = initial, final, increment do statements in the loop body end

donde inicial, final e incremento son expresiones que producen (o se pueden convertir en) números. La variable se considera local del bloque de sentencias for loop; no se puede usar fuera del bucle. Se puede omitir el incremento; el valor predeterminado es 1. Las expresiones se evalúan una vez al principio del ciclo. La condición final es variable > final si el incremento es positivo y variable < final si el incremento es negativo. El bucle termina inmediatamente si el incremento es 0.

Ejemplo (equivalente a los bucles while y repeat de la sección anterior):

sum = 0 for i = 1, #a do -- increment defaults to 1 sum = sum + a[i] end

El segundo tipo de bucle for es el genérico for, que se puede utilizar para tipos de bucles más flexibles. Implica el uso de funciones, por lo que se analizará más adelante después de que se hayan introducido las funciones.

Descanso

La sentencia break se usa dentro de un bucle while, repeat o for. Terminará el ciclo y reanudará la ejecución en la primera sentencia después del bucle. Ejemplo (también equivalente a los bucles while, repeat y for anteriores):

sum, i = 0, 1 while true do if i > #a then break end sum = sum + a[i] i = i + 1 end

Ir a

La sentencia goto se puede utilizar para ir hacia adelante o hacia atrás hasta una etiqueta. La etiqueta es un identificador y su sintaxis es: :label::. La sentencia goto es goto label. Ejemplo (una vez más equivalente a los bucles anteriores):

sum, i = 0, 1 ::start_loop:: if i > #a then goto end_loop -- forward jump end sum = sum + a[i] i = i + 1 goto start_loop -- backwards jump ::end_loop:: . . .

Ha habido una controversia de larga data sobre el uso de gotos en la programación. En general, debe intentar utilizar las demás estructuras de control para que sus funciones sean más legibles y fiables. Sin embargo, el uso ocasional y juicioso de gotos puede conducir a mejores programas. En particular, los gotos pueden resultar útiles para gestionar los errores.

La versión oficial de este contenido está en inglés. Para mayor comodidad, parte del contenido de la documentación de Cloud Software Group solo tiene traducción automática. Cloud Software Group no puede controlar el contenido con traducción automática, que puede contener errores, imprecisiones o un lenguaje inadecuado. No se ofrece ninguna garantía, ni implícita ni explícita, en cuanto a la exactitud, la fiabilidad, la idoneidad o la precisión de las traducciones realizadas del original en inglés a cualquier otro idioma, o que su producto o servicio de Cloud Software Group se ajusten a cualquier contenido con traducción automática, y cualquier garantía provista bajo el contrato de licencia del usuario final o las condiciones de servicio, o cualquier otro contrato con Cloud Software Group, de que el producto o el servicio se ajusten a la documentación no se aplicará en cuanto dicha documentación se ha traducido automáticamente. Cloud Software Group no se hace responsable de los daños o los problemas que puedan surgir del uso del contenido traducido automáticamente.
Estructuras de control