コンテンツにスキップ

制御フローと Section トポロジー

命名セクション、単方向ジャンプ、サブルーチン呼び出しとコールスタック

このページは Ktory の設計原則 に従い、現在の契約と長期目標を区別します。

ルートはソース順に進み、名前付きセクションの本文を読み飛ばします。本文は必ず === 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 の形式と読み込みは延期です。