ご意見をお寄せいただきありがとうございました

この記事は機械翻訳されています.免責事項

制御構造

拡張関数言語は、プログラムの実行を制御するための通常のステートメントを提供します。

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

If Then Else

If ステートメントは、1 つ以上の条件に基づいて実行するステートメントのブロックを選択します。次の 3 つの形式があります。

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

例:

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

注:

  • 式は、C および Java の場合と同様に、括弧で囲まれていません。
  • C/Java スイッチ文に相当するものはありません。等価を行うには、一連の if elseif ステートメントを使用する必要があります。

While Do and Repeat Until

while 文と repeat 文は、式によって制御ループを提供します。

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

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

repeatの例:

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

もちろん、終了しないループを書くことは可能です。たとえば、これらの例のいずれかで i = i + 1 ステートメントを省略した場合などです。このような関数が実行されると、Citrix ADCは関数が妥当な時間内に完了しなかったことを検出し、実行時エラーで強制終了します。

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

は、/var/log/ns.log に報告されます。

Numeric For

forループには2種類あります。最初は、のための数値です。これは、CおよびJavaでのforステートメントの通常の使用に似ています。数値のfor文は、変数が最終的な値を渡したかどうかをテストし、そうでない場合は、文のブロックを実行し、変数をインクリメントし、繰り返し、変数を初期化します。forループの数値の構文は次のとおりです。

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

ここで、initial、final、およびincrementは、数値を生成する(または変換できる)すべての式です。変数は、forループステートメントブロックに対してローカルであるとみなされ、ループの外側では使用できません。incrementは省略できます。デフォルトは1です。式は、ループの先頭で 1 回評価されます。終了条件は、増分が正の場合は変数 > finalで、増分が負の場合は変数 < finalです。増分が 0 の場合、ループは直ちに終了します。

例 (前のセクションの while ループと繰り返しのループと同等):

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

forループの2番目のタイプは、ループのより柔軟なタイプに使用することができ、のための汎用です。これは、関数の使用を伴うので、関数が導入された後に後で説明します。

Break

break文は、しばらくの間、繰り返し、またはforループ内で使用されています。これは、ループを終了し、ループの後の最初の文で実行を再開します。例(前述の while、repeat、および for ループと同等):

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

Goto

goto文は、ラベルに前方または後方にジャンプするために使用することができます。ラベルは識別子であり、その構文は:: label:: です。goto文はgotoラベルです。例(前述のループと同等):

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

プログラミングでgotosを使用することについては、長い間論争がありました。一般に、関数をより読みやすく信頼できるものにするために、他の制御構造を使用してください。しかし、時折gotosの賢明な使用は、より良いプログラムにつながる可能性があります。特に、gotosはエラーの処理に役立ちます。

このコンテンツの正式なバージョンは英語で提供されています。Cloud Software Groupドキュメントのコンテンツの一部は、お客様の利便性のみを目的として機械翻訳されています。Cloud Software Groupは機械翻訳されたコンテンツを管理していないため、誤り、不正確な情報、不適切な用語が含まれる場合があります。英語の原文から他言語への翻訳について、精度、信頼性、適合性、正確性、またはお使いのCloud Software Group製品またはサービスと機械翻訳されたコンテンツとの整合性に関する保証、該当するライセンス契約書またはサービス利用規約、あるいはCloud Software Groupとのその他すべての契約に基づき提供される保証、および製品またはサービスのドキュメントとの一致に関する保証は、明示的か黙示的かを問わず、かかるドキュメントの機械翻訳された範囲には適用されないものとします。機械翻訳されたコンテンツの使用に起因する損害または問題について、Cloud Software Groupは責任を負わないものとします。
制御構造