はじめに
先日、以下の記事を発表しました。
新しいテクノロジーに触れる時はいつでも楽しいものです。
中でも新しいプログラミング言語(のパラダイム)を学ぶことは、特別に楽しいことです。
ということで、まだまだ勉強中ですが、公式ドキュメントの学習過程の記録として、以下の記事をまとめてみました。
本稿情報のソースとして、下記ドキュメントを参照ください。
Fenlの述語関数:if
とwhen
Fenl は 2 つの述語関数を提供します。
if
関数if(condition, value)
は、condition
が true
の場合はvalue
を返し、それ以外の場合はすべてnull
を返します。
関数実行の結果は、標準の連続性ルールに従います。たとえば、 value
とcondition
が両方とも連続値であれば結果は連続値となり、それ以外の場合は結果は離散値になります。
when
関数when(condition, value)
は、値が生成されるたびに value
の 値を返します。の結果は常に離散的であり 、一連の時間で値が生成され、値が生成されます。condition``true``when``condition``true
典型的な使われ方
これらの関数は、さまざまな方法で値をフィルタリングします。if
は値を null
に置き換えることによってフィルタリングするのに対し、when
は値が生成される一連の時刻を制限することによって値をフィルタリングします。
Kaskada の計算エンジンはテーブル形式であるため、if
のパフォーマンスが when
のパフォーマンスよりも優れている場合があります。if
は単純な変換規則として適用できますが、when
では新しいテーブルを構築することになるからです。
別のケースとして、行数が非常に少ないテーブルに対して、後続のオペレーションに対する計算処理を適用できる場合には、'when'の性能が勝る可能性があります。
一般的なガイドラインとしては、値の置換には if を使用し、値のフィルター処理には when を使用します。
たとえば、if
とelse
を使用して、以下のように値をクリーンアップします。
Event.duration | if($input > 0) | else(0)
以下は、when
クエリによって返された行をフィルタリングする例です。
Event | when(Event.kind == "conversion")