制御フローと Section トポロジー
命名セクション、単方向ジャンプ、サブルーチン呼び出しとコールスタック
このページは Ktory の設計原則 に従い、現在の契約と長期目標を区別します。
制御フローとセクション
Section titled “制御フローとセクション”ルートはソース順に進み、名前付きセクションの本文を読み飛ばします。本文は必ず === Label === より深くインデントします。宣言と同じ深さに戻るとルートの内容に戻り、宣言直後にインデントせず書いた本文もルートに属します。
Start() は既定ではルートだけを実行します。名前付きセクションだけがありルートが空のファイルは、そのまま終了します。名前付きセクションへ入るには、ルートから明示的にジャンプ・呼び出しを行うか、ホストで入口を指定してください。
: 物語が始まる。=> Greeting: 本筋を続ける。-> end
=== Greeting === アリス: ようこそ。 -> return=> Greeting は戻り先を記録し、-> return で「本筋を続ける」に戻ります。-> Greeting に置き換えると呼び出しスタックが空になるため、戻り先があるとは仮定できません。
| 指令 | 意味 |
|---|---|
-> Label |
呼び出しスタックを消去して対象セクションへ移る |
=> Label |
戻り先を記録して対象セクションを呼ぶ |
-> return |
呼び出しフレームを取り出して戻る。空スタックは制御エラー |
-> break |
最も近い活動中のループを抜け、その後へ進む |
-> end |
Main はルートでセッション終了、名前付き節で後続ルートへ復帰。補助は自身を終了 |
名前付きセクションの自然終了も、その中の -> end と同じです。呼び出し元へ自動では戻りません。 戻る場合は -> return を記述します。ホストは Start(entryLabel: "Greeting") で入口を指定できますが、戻り先は作られないため、上の例の末尾の return はルートから呼び出した場合にだけ有効です。
Forward-only は前の記述へのジャンプやループを禁止しません。以前の外部副作用を自動で取り消さないという意味です。演出や状態変更を持つ拍へ入り直すと、修飾子も再度通知されます。
上記のルート復帰は Main の規則です。補助の名前付き節 EOF/end は補助自身を終え、後続ルートを探しません。ジャンプ・呼び出しは役割を保ち、呼び出しには明示 return が必要です。Main の #.track(source="Greeting", name="greeting") から同じ節へ入れますが、呼び出しフレームがなければ末尾で return できません。将来の外部ファイル入口は対象ルートから開始し、明示 URL の形式と読み込みは延期です。
