Steuerungsstrukturen

Die Sprache der Erweiterungsfunktion stellt die üblichen Anweisungen zur Steuerung der Programmausführung bereit.

  • Wenn dann sonst
  • Während, mach und wiederhole bis
  • Numerisch für
  • Pause
  • Goto

Wenn dann sonst

Bei Anweisungen werden Anweisungsblöcke ausgewählt, die auf der Grundlage einer oder mehrerer Bedingungen ausgeführt werden sollen. Es gibt drei Formen:

Wenn dann Formular

if expression then
     statements to execute if expression is not false or nil
end
<!--NeedCopy-->

Wenn dann sonst Formular

if expression then
     statements to execute if expression is not false or nil
else
     statements to execute if expression is false or nil
end
<!--NeedCopy-->

Wenn dann elseif sonst Formular

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
<!--NeedCopy-->

Beispiel:

if headers[name] then

     local next_value_index = #(headers[name]) + 1
     headers[name][next_value_index] = value

else

     headers[name] = {name .. ":" .. value}

end
<!--NeedCopy-->

Hinweis:

  • Der Ausdruck ist nicht in Klammern eingeschlossen, wie dies in C und Java der Fall ist.
  • Es gibt kein Äquivalent zur C/Java-Switch-Anweisung. Sie müssen eine Reihe von if elseif-Anweisungen verwenden, um das Äquivalent zu erreichen.

Während, mach und wiederhole bis

Die Anweisungen while und repeat stellen Schleifen bereit, die durch einen Ausdruck gesteuert werden.

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
<!--NeedCopy-->

Beispiel für while:

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
<!--NeedCopy-->

Beispiel für die Wiederholung:

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
<!--NeedCopy-->

Natürlich ist es möglich, eine Schleife zu schreiben, die nicht endet, wenn Sie beispielsweise in einem dieser Beispiele die Anweisung i = i + 1 weglassen. Wenn eine solche Funktion ausgeführt wird, erkennt NetScaler, dass die Funktion nicht innerhalb einer angemessenen Zeit abgeschlossen wurde, und beendet sie mit einem Laufzeitfehler:

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

wird in /var/log/ns.log gemeldet.

Numerisch für

Es gibt zwei Arten von vier Schleifen. Das erste ist das numerische for, das der üblichen Verwendung der for-Anweisung in C und Java ähnelt. Die numerische Anweisung for initialisiert eine Variable, testet, ob die Variable einen Endwert übergeben hat, und führt andernfalls einen Block von Anweisungen aus, erhöht die Variable und wiederholt sich. Die Syntax für die numerische For-Schleife lautet:

for variable = initial, final, increment do

     statements in the loop body

end
<!--NeedCopy-->

wobei initial, final und increment alle Ausdrücke sind, die Zahlen ergeben (oder in diese umgewandelt werden können). Variable wird als lokal für den For-Loop-Anweisungsblock betrachtet; sie kann nicht außerhalb der Schleife verwendet werden. Inkrement kann weggelassen werden; der Standardwert ist 1. Die Ausdrücke werden zu Beginn der Schleife einmal ausgewertet. Die Endbedingung ist variabel > final, wenn das Inkrement positiv ist, und variabel < final, wenn das Inkrement negativ ist. Die Schleife wird sofort beendet, wenn das Inkrement 0 ist.

Beispiel (entspricht den Schleifen while und repeat im vorherigen Abschnitt):

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

Die zweite Art von For-Schleifen ist die generische For-Schleife, die für flexiblere Arten von Schleifen verwendet werden kann. Es beinhaltet die Verwendung von Funktionen, auf die später nach der Einführung der Funktionen eingegangen wird.

Pause

Die Break-Anweisung wird innerhalb einer while-, repeat- oder for-schleife verwendet. Es beendet die Schleife und setzt die Ausführung bei der ersten Anweisung nach der Schleife fort. Beispiel (entspricht auch den vorangegangenen while, repeat und for loops):

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

Goto

Die goto-Anweisung kann verwendet werden, um zu einem Label vorwärts oder rückwärts zu springen. Das Label ist ein Bezeichner und seine Syntax lautet: :label::. Die goto-Anweisung lautet gotolabel. Beispiel (entspricht wieder den vorherigen Schleifen):

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::
. . .
<!--NeedCopy-->

Es gibt seit langem eine Kontroverse über die Verwendung von Gotos in der Programmierung. Im Allgemeinen sollten Sie versuchen, die anderen Kontrollstrukturen zu verwenden, um Ihre Funktionen lesbarer und zuverlässiger zu machen. Der gelegentliche umsichtige Einsatz von Gotos kann jedoch zu besseren Programmen führen. Insbesondere Gotos können bei der Behandlung von Fehlern nützlich sein.

Steuerungsstrukturen