WikiChree.COM 新規   編集   添付   管理  



トップ   編集 編集〔GUI〕 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

Pkript/文法/制御構文 の変更点

#author("2026-08-31T22:16:33+09:00","default:guide","guide")
* Pkript/文法/制御構文 [#xf32da52]
#author("2026-09-04T00:05:57+09:00","default:mcp","bot-mcp")
* Pkript/文法/制御構文 [#u002894d]

条件分岐およびループ処理の構文仕様。

** リファレンス [#kc546ee4]
** リファレンス [#ee6ce75f]

*** 条件分岐 (if / switch) [#nd12d5fc]
*** 条件分岐 [#x6c3798a]

#pkript(highlight){{
#highlight{{
if (条件) { ... } else if (条件) { ... } else { ... }
}}

#pkript(highlight){{
*** switch [#m62de8c1]

#highlight{{
switch (値) {
    case 条件1:
    case 値1:
        break;
    default:
        break;
}
}}

- switch の比較は厳密等価(=== 相当)で行われる
- break を記述しない場合は次の case へフォールスルーする
- 比較は厳密等価(=== 相当)で行われる。"1" と 1 は一致しない
- break を書かなければ次の case へフォールスルーする
- default はどこに置いてもよい。一致する case がない場合に実行される
- switch 内の break は switch のみを抜ける。continue は外側のループのものとして働く

*** ループ構文 [#tae2cf19]
*** ループ [#c1458e1b]

#pkript(highlight){{
#highlight{{
while (条件) { ... }
do { ... } while (条件);
for (初期化; 条件; 更新) { ... }
for (const 要素 of 配列または文字列) { ... }
for (const キー in オブジェクト) { ... }
}}

- for..of は要素の「値」を走査する
- for..in は「キー」(文字列)を走査する
- break / continue が使える
- for..of は Array と String を走査し、要素の「値」が入る
- for..in は「キー」(文字列)が入る。Array に使うと添字が文字列になるため、配列には for..of を使う
- ループ変数は繰り返しごとに新しく束縛されるため const を使える
- do..while は本体を先に実行するため必ず1回以上実行される

*** ラベル [#gb9e2381]
*** ラベル [#q47f75dd]

#pkript(highlight){{
#highlight{{
ラベル名: for (...) {
    break ラベル名;
    continue ラベル名;
}
}}

- ラベルは break / continue と同一行に記述する
- ラベルは break / continue と同一行に記述する。改行は文の終わりとして扱われる
- continue のラベルはループに付いている必要がある。ブロックへは break のみ届く
- ラベル付きの break は switch を素通りする(switch が飲み込むのはラベルなしの break のみ)
- 存在しないラベルと二重定義のラベルは解析時にエラー


** 使用法 [#reefc473]
** 使用法 [#o980e83c]

*** 配列要素を反復処理する [#s95d2552]
*** 配列要素を反復処理する [#ctrl_usage_foreach]

#pkript(highlight){{
#highlight{{
const items = ["A", "B", "C"];
let html = "";
for (const item of items) {
    html += "<li>" + htmlsc(item) + "</li>";
}
return "<ul>" + html + "</ul>";
}}

*** 二重ループをラベルで抜ける [#ctrl_usage_label]

#highlight{{
outer: for (const row of rows) {
    for (const cell of row) {
        if (cell == "") continue outer;
        if (cell == "!") break outer;
    }
}
}}