Merci pour vos commentaires

Ce article a été traduit automatiquement. (Clause de non responsabilité)

Structures de contrôle

Le langage de la fonction d’extension fournit les instructions habituelles pour contrôler l’exécution du programme.

  • If Then Else
  • While Do and Repeat Until
  • Numeric For
  • Break
  • Goto

If Then Else

Si les instructions sélectionnent des blocs d’instructions à exécuter en fonction d’une ou plusieurs conditions. Il existe trois formes :

If then Form

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

If then else Form

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

If then 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

Exemple :

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

Remarque :

  • L’expression n’est pas comprise entre parenthèses comme c’est le cas en C et Java.
  • Il n’y a pas d’équivalent à l’instruction de commutateur C/Java. Vous devez utiliser une série d’instructions if elseif pour faire l’équivalent.

While Do and Repeat Until

Les instructions while et repeat fournissent des boucles contrôlées par une expression.

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

Exemple pour tout :

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

Exemple de répétition :

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

Bien sûr, il est possible d’écrire une boucle qui ne se termine pas, par exemple, si vous omettez l’instruction i = i + 1 dans l’un de ces exemples. Lorsqu’une telle fonction est exécutée, Citrix ADC détectera que la fonction ne s’est pas terminée dans un délai raisonnable et la tuera avec une erreur d’exécution :

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

sera signalé dans /var/log/ns.log.

Numeric For

Il existe deux types de boucles pour. Le premier est le numérique for, qui est similaire à l’utilisation habituelle de l’instruction for en C et Java. L’instruction numérique pour initialise une variable, teste si la variable a passé une valeur finale, et sinon exécute un bloc d’instructions, incrémente la variable et se répète. La syntaxe de la boucle numérique for est :

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

où initial, final et incrément sont toutes les expressions qui génèrent (ou peuvent être converties en) des nombres. variable est considérée comme locale au bloc d’instruction de boucle for ; elle ne peut pas être utilisée en dehors de la boucle. incrément peut être omis ; la valeur par défaut est 1. Les expressions sont évaluées une fois au début de la boucle. La condition de fin est variable > final si l’incrément est positif et variable < final si l’incrément est négatif. La boucle se termine immédiatement si l’incrément est 0.

Exemple (équivalent aux boucles while et repeat dans la section précédente) :

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

Le deuxième type de boucle for est le générique pour, qui peut être utilisé pour les types de boucles plus flexibles. Il implique l’utilisation de fonctions, donc sera discuté plus tard après l’introduction des fonctions.

Break

L’instruction break est utilisée dans une boucle while, repeat ou for. Il mettra fin à la boucle et reprendra l’exécution à la première instruction après la boucle. Exemple (également équivalent à la précédente while, repeat, et pour les boucles) :

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

Goto

L’instruction goto peut être utilisée pour sauter en avant ou en arrière vers une étiquette. L’étiquette est un identifiant et sa syntaxe est ::label::. L’instruction goto est l’étiquette goto. Exemple (une fois de plus équivalent aux boucles précédentes) :

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

Il y a eu une controverse depuis longtemps sur l’utilisation de gotos dans la programmation. En général, vous devriez essayer d’utiliser les autres structures de contrôle pour rendre vos fonctions plus lisibles et fiables. Mais l’utilisation judicieuse occasionnelle des gotos peut conduire à de meilleurs programmes. En particulier, les gotos peuvent être utiles pour gérer les erreurs.

La version officielle de ce document est en anglais. Certains contenus de la documentation Cloud Software Group ont été traduits de façon automatique à des fins pratiques uniquement. Cloud Software Group n'exerce aucun contrôle sur le contenu traduit de façon automatique, qui peut contenir des erreurs, des imprécisions ou un langage inapproprié. Aucune garantie, explicite ou implicite, n'est fournie quant à l'exactitude, la fiabilité, la pertinence ou la justesse de toute traduction effectuée depuis l'anglais d'origine vers une autre langue, ou quant à la conformité de votre produit ou service Cloud Software Group à tout contenu traduit de façon automatique, et toute garantie fournie en vertu du contrat de licence de l'utilisateur final ou des conditions d'utilisation des services applicables, ou de tout autre accord avec Cloud Software Group, quant à la conformité du produit ou service à toute documentation ne s'applique pas dans la mesure où cette documentation a été traduite de façon automatique. Cloud Software Group ne pourra être tenu responsable de tout dommage ou problème dû à l'utilisation de contenu traduit de façon automatique.
Structures de contrôle