Asakusa FrameworkのOperator DSLの停止演算子(stop)のメモ。
|
停止演算子は、出力データをどこにも出力しない演算子。
性能特性は無し。
入力 ポート数 |
入力データモデル の制約 |
イメージ | 出力 ポート数 |
出力データモデル の制約 |
入力1レコード に対する 出力レコード数 |
---|---|---|---|---|---|
1 |
![]() |
0 | なし。 |
演算子からの出力データを使用しない(どの演算子でも使用しない・どのファイルにも出力しない)場合は、停止演算子に接続する。
つまり、出力データを破棄する為に停止演算子を使う。
停止演算子もあまり使うことは無いと思うが、空演算子(empty)よりは使いそう。変換演算子(@Convert)のオリジナルデータ出力に対してはよく使う(笑)
(AsakusaFWでは、出力ポートからは必ず何かしらの接続をしないといけない。ポートに接続が無いということは設計/実装漏れではないか?という判断でエラーになる)
停止演算子のみに接続している演算子は、最適化されて処理自体が削除され、何も実行されないことがある。
(除去抑制(@Sticky)を参照)
停止演算子とは反対に、入力データが無い場合は空演算子(empty)を使う。
停止演算子のコーディング例。
変換演算子(@Convert)の変換前データ出力(original)を停止演算子に接続する。
(この図はToad Editorを用いて作っています)
※Toad Editorでは、 停止演算子を「丸の中に×(バツ印)の入った図形」で表している。
hoge = { 〜 };
import com.asakusafw.vocabulary.flow.util.CoreOperatorFactory; import com.example.modelgen.dmdl.model.Hoge; import com.example.operator.ExampleOperatorFactory; import com.example.operator.ExampleOperatorFactory.ToFoo;
private final In<Hoge> in1; private final In<Hoge> in2; private final Out<Hoge> out;
@Override public void describe() { ExampleOperatorFactory operators = new ExampleOperatorFactory(); CoreOperatorFactory core = new CoreOperatorFactory(); // HogeをFooに変換する ToFoo toFoo = operators.toFoo(this.in); // 停止演算子 core.stop(toFoo.original); this.out.add(toFoo.out); }
停止演算子はコア演算子なので、Operatorクラスにプログラマーが何かを実装する必要は無い。
Flow DSLでは、stopメソッドの引数に(破棄したい)出力データを指定する。
停止演算子はコア演算子なので、(Operatorクラスにプログラマーが何も実装していないので)Operatorの単体テストを実装する必要は無い。
停止演算子は、MS-DOSのNULデバイスやUNIXの/dev/nullを 出力先として使うのに似ている。
> copy in NUL
> cp in /dev/null