関数
呼び出し可能な一続きのグラフを宣言し、そこから結果を返し、それが見える場所ならどこからでも呼び出す
fn とは、他のグラフから実行できる、名前の付いた一続きのグラフです。Fn は fn を宣言してそのパラメータを保持し、Fn Return は fn を終了させて結果を返し、Call Fn は fn を呼び出して結果を待ちます。3 つのノードで実現しているのはただ一つの目的です:同じ 8 個のノードを、必要とするウィジェットのたびにコピーし続けるのをやめることです。
規約
- 3 つのノードはいずれも
eventグラフに属します。 fn の本体はfunctionグラフではありません。functionは別のグラフの種類です——Function Entryから入り、副作用のあるノードも latent ノードも許されません——一方 fn の本体は普通の event グラフの領域であり、event グラフにできることは何でもできます。 - fn の正体はヘッドノードであって、名前ではありません。 カード上で名前を変えても、すべての呼び出し元は壊れることなくラベルを付け替えます。同じスコープに同名の fn が 2 つあっても正しく解決され、エディターはその衝突を警告します。名前は人間のためのものであり、束縛は id によって行われるからです。
- 可視性はオーナーに従います。
globalMainブループリントで宣言された fn はどこからでも呼び出せます。surfaceMainまたはwidgetMainブループリントで宣言された fn は、同じ Surface からのみ呼び出せます。Blueprint Value は呼び出せますが宣言はできません。componentWidgetMainとsharedAssetのブループリントはどちらもできません。 - パラメータと結果のピンは作者が定義するものであり、固定ではありません。
FnとFn Returnは、カード上のボタンからデータピンを増やしていきます。各ピンには名前と、string、integer、float、boolean、json、anyのいずれかから選んだ型が付きます。 - 再帰の上限は 32 フレームです。 それを超えると呼び出しはそのまま失敗します。エディターは、ある fn が直接または別の fn 経由で自分自身を呼び出していることを検知できた時点で警告します。
Fn
blueprint.fn.head
呼び出し可能な fn のヘッドです。exec 入力を持ちません——グラフ内のどこからもこのノードに接続してくるものはありません。誰かがこの fn を呼び出したことで実行が始まり、本体は then にぶら下がります。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
then | out · exec | — | Body というラベルが付きます。呼び出し元がこの fn を呼ぶと実行されます。 |
カード上のフィールド
| フィールド | 内容 |
|---|---|
name | fn の名前。呼び出し元の Function ドロップダウンに表示されるものです。 |
Add parameter は、パラメータごとに 1 つのデータ出力ピン(param_N_value)を追加します。それぞれにカード上で設定したラベルと型が付きます。引数は本体が始まる前に注入されるため、本体の最初のノードの時点で、パラメータピンにはすでに呼び出し元の値が入っています。
Fn Return
blueprint.fn.return
fn の本体を終了させ、結果を返します。終端ノードです——exec 出力を持たず、これより後に実行されるものはありません。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
in | in · exec | — |
Add return value は、結果ごとに 1 つのデータ入力ピン(ret_N_value)を追加します。結果ピンはカード上のリテラルを一切提供しません:結果は必ず接続された値の出どころから来る必要があり、これによってグラフは返り値がどこで作られたかを常に示せます。
fn のシグネチャは、ヘッドから到達できる最初の Fn Return から取られます。他の分岐にさらに Fn Return があっても、同じ結果を宣言している限り問題ありません——異なる結果を宣言するとエディターがそれらを警告し、呼び出し元には引き続き最初のものだけが見えます。どのヘッドからも到達できない Fn Return にも警告が出ます。
Call Fn
blueprint.fn.call · Latent
見える範囲にある fn を呼び出し、終了を待ちます。Function で対象を選ぶと、カードにパラメータの数だけデータ入力が、結果の数だけデータ出力が生成されます。
| ピン | 方向 | 型 | 備考 |
|---|---|---|---|
in | in · exec | — | |
next | out · exec | — | fn の本体が終了すると続きが実行されます。 |
カード上のフィールド
| フィールド | 内容 |
|---|---|
fnRef | 呼び出す fn。ドロップダウンには、ここから見えるすべての fn が name (scope) の形で表示されます。 |
これらの引数ピンと結果ピンは、ノード自身に保存されたシグネチャのスナップショットから再構築されます。そのため、呼び出し先のブループリントを読み込まなくてもカードを描画できます。型が許す範囲で、引数ピンにはカード上のリテラルを渡せます。呼び出し先のシグネチャが変わると、スナップショットは古くなり、バリデーションはピンを同期するために fn を選び直すよう求めます——選び直すまで、この呼び出しは古い形のまま動作し続けます。
本体は呼び出し元の実行の一部として動作します:呼び出し元がキャンセルされると fn もキャンセルされ、本体内で投げられたエラーは Call Fn ノード上に現れます。
Call Fn は latent ノードであり、Blueprint Value のグラフは latent ノードを拒否します——ただしこの 1 つだけは例外です。値プロバイダーは fn を呼び出すことができ、それはホストウィジェットの身元で実行されます。本体が世界に対して行うことの責任は、あなた自身が負うことになります。