API Basic While ja - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

While / Wend / Exit While / Break

ClassicUO • Basic

While は各反復の前に条件を検査し、真の間繰り返します。このエンジンでは Wend で閉じます。VB.NET の End While は対応していません。

正確な構文

While condition
    statements
Wend
Continue While
Exit While
Break

パラメーター

  • condition — 最初と最後を含む各検査で再評価する式。比較または数値 Boolean を使います。0/False で終了、1/True や他の非ゼロ数値で継続します。文字列は Boolean として解析しません。
  • statements — 処理を行い、条件を変化させる本体の文。最初の検査が偽なら本体は一度も実行しません。
  • Wend / exit — Wend は条件に戻ります。Continue While は再検査、Exit While は他種の内部ループを越えても最も近い While を終了します。Break は種類を問わず最も近いループを終了します。

戻り値

While、Wend、Exit While、Break に戻り値はありません。本体内の RETURN は手続き・関数全体を終了します。例は Integer 6、1、406 を返します。検索結果の 1 は配列インデックスで、成功の Boolean ではありません。

動作

  • 検査、本体、検査への復帰の順です。数値境界の保存やカウンターの自動更新はしません。
  • 進行は明示的に記述します。ゲーム状態を繰り返し確認する場合は適切な Wait と期限を設けます。While 自体は待機も時間切れも行いません。一時停止・停止は利用可能です。
  • Continue や終了で離れる Try の Finally は実行されます。ヘッダー、各文、Wend は手続きまたは関数内の別々の行に記述します。

使用例

1. 各桁の合計

# DigitSum は number=123 を ByVal で受けます。MOD 10 で末尾の桁を読み、Fix(number/10) で除きます:123→12→1→0。total=3+2+1=6。最後の偽条件で終了して Main は 6 を受けます。入力 0 なら本体を飛ばして 0 を返します。
Option Explicit On
Function DigitSum(ByVal number)
    Var total = 0
    While number > 0
        total += number MOD 10
        number = Fix(number / 10)
    Wend
    Return total
End Function
Sub Main()
    Return DigitSum(123)
End Sub

パラメーターと実行の説明:

DigitSum は number=123 を ByVal で受けます。MOD 10 で末尾の桁を読み、Fix(number/10) で除きます:123→12→1→0。total=3+2+1=6。最後の偽条件で終了して Main は 6 を受けます。入力 0 なら本体を飛ばして 0 を返します。

2. 最初の一致を検索

# FirstAbove は values=[4,7,9] と threshold=6 を受けます。長さの検査が values[index] を保護します。index=1 で 7>6 となり found=1 を保存し Exit While で終了。一致しなければ -1 のままです。Main はゼロ始まりのインデックス 1 を返します。
Option Explicit On
Function FirstAbove(ByVal values, ByVal threshold)
    Var index = 0
    Var found = -1
    While index < GetArrayLength(values)
        If values[index] > threshold Then
            found = index
            Exit While
        End If
        index += 1
    Wend
    Return found
End Function
Sub Main()
    Dim values[2]
    values[0] = 4
    values[1] = 7
    values[2] = 9
    Return FirstAbove(values, 6)
End Sub

パラメーターと実行の説明:

FirstAbove は values=[4,7,9] と threshold=6 を受けます。長さの検査が values[index] を保護します。index=1 で 7>6 となり found=1 を保存し Exit While で終了。一致しなければ -1 のままです。Main はゼロ始まりのインデックス 1 を返します。

3. 条件の評価回数

# CanContinue は checks を ByRef、index と limit=3 を ByVal で受けます。checks を増やし index<limit を 1/0 で返します。index=0、1、2、3 で検査するので三反復に四呼び出しです。total=6、Main は 406 を返します。
Option Explicit On
Function CanContinue(ByRef checks, ByVal index, ByVal limit)
    checks += 1
    Return index < limit
End Function
Sub Main()
    Var checks = 0
    Var index = 0
    Var total = 0
    While CanContinue(checks, index, 3)
        index += 1
        total += index
    Wend
    Return checks * 100 + total
End Sub

パラメーターと実行の説明:

CanContinue は checks を ByRef、index と limit=3 を ByVal で受けます。checks を増やし index<limit を 1/0 で返します。index=0、1、2、3 で検査するので三反復に四呼び出しです。total=6、Main は 406 を返します。


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic