LoginSignup
0
0

for文

Last updated at Posted at 2023-12-07

for文が少しだけ拡張されています。

for-inの左辺拡張

inの左辺の変数で右辺の配列・コレクションの要素を受けられましたが、それに加えてインデックス番号と最終周かどうかのフラグを得られるようになりました。左辺に,区切りで変数を記述することで、それぞれの変数に値を受けることができます。

// 1番目の変数に要素
// 2番目の変数にインデックス
// 3番目の変数は最後の周であればTRUE
for c, i, f in ["あ", "い", "う", "え", "お"]
    print [c, i, f]
next
// [あ, 0, False]
// [い, 1, False]
// [う, 2, False]
// [え, 3, False]
// [お, 4, True]

// 要素とインデックスを得る
for c, i in ["あ", "い", "う", "え", "お"]
    print [c, i]
next

// 要素と最終周フラグを得る
// インデックスの変数は省略できる
for c,, f in ["あ", "い", "う", "え", "お"]
    print [c, f]
next

// 要素のみ (従来のfor-in)
for c in ["あ", "い", "う", "え", "お"]
    print c
next

for-else-endfor

forループ中にbreakしなかった場合に動作するelse節が追加されました。

for i = 0 to 2
    print i
else
    print "実行される"
endfor

// 途中でbreakするとelse節は実行されない
for i = 0 to 2
    if i = 1 then
        break
    endif
else
    print "実行されない"
endfor

// for-inも対応
for file in getdir("C:\test", "*.uws")
    if file == "hoge.uws" then
        print "hoge.uwsが見つかりました"
        break
    endif
else
    print "hoge.uwsが見つかりませんでした"
endfor
ループ処理に単行ifを書くと構文解析エラーになります。

バージョン0.14.0にて以下が実行できません

for i = 0 to 2
    if i = 1 then break
else
    print "実行されない"
endfor // [5, 1] - 不正なトークン(EndFor): ブロックの終わりはNextです

elseが単行if文に含まれてしまい、for-elseの解析ができなくなっているのが原因です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0