計算値作成ページでMETRON構文を使った計算式の構築について説明します。
計算式パネルを使用すると、複数の変数を関連付ける計算値を構築するための数式を書くことができます。使用可能なさまざまな式や関数について理解を深め、METRON EOMプラットフォームで使用される構文に関するヘルプを利用するには、[?] ボタンをクリックしてください。
EOMプラットフォームでは、次のような演算を行うことができます:
- 四則演算
- 数値比較
- ロジカル演算子
- ビット演算子
- 三項演算子
- 文字列操作
- データ構造
EVA-L Syntax
EVA-L v2.0.2
基本
データ型
型 |
値 |
---|---|
nil |
値が存在しないことを表します |
数値 |
例: 103, 2.5, .5, 1_000 |
ブール値 |
true, false |
文字列 |
例: "hello", 'hello' |
配列 |
例: [1, 2, 3] |
ディクショナリ |
例: {x: 2, y: 1} |
変数
変数の値は、関連する識別子を通して参照することができます。識別子はデータソースに存在する系列の値を参照するだけではなく、定数(後に説明)の場合にも使用されます。
演算子
演算子は通常、2つの変数の間に記号を配置することで表現されます。
例: 1 + 2
その他の構文を持つ演算子については、このドキュメントでさらに詳しく説明します。
例: !演算子(NOT演算子)は、単一の変数の先頭に記号が付きます。例: !x.
関数
関数は"f"または"lib.F"のような形で提供されます。前者は直接アクセスできる関数で、後者は個別のライブラリの中に存在する関数です(ここではlibはライブラリ名の一例)。
関数は、括弧の間に引数を渡すことで呼び出されます。
例:f(a, b)
括弧と演算処理の優先順位
括弧はより一般的に、用語や変数をグループ化するために使うことができる。
(1 + 2)は1 + 2と同じ式である。
括弧は、異なる演算のどちらを優先するかを明確にするのに役立ちます。
例
-
2 * 3 + 4 -> 10
-
2 * (3 + 4) -> 14
プロパティへのアクセス
配列のインデックス
配列の要素には、ブラケット記法を使ってインデックスでアクセスできます。インデックスは0から始まります。
-
arr[0] -> 1
-
arr[1] -> 2
インデックスは0以上、かつ最後のインデックス以下でなければなりません。
定数
TODO: when implemented
演算子
TODO: examples in each
算術演算子
|
記号 |
例 |
---|---|---|
足し算 |
+ |
|
引き算 |
- |
|
掛け算 |
* |
|
割り算 |
/ |
|
剰余演算(余り) |
% |
10 % 3 -> 1、10 % -3 -> 1、-10 % -3 -> -1、-10 % 3 -> -1 |
べき乗 |
** |
2 ** 3 -> 8 |
数値比較演算子
|
記号 |
---|---|
左辺と右辺の値が同じ |
== |
左辺と右辺が異なる |
!= |
左辺より右辺が大きい |
< |
左辺が右辺よりも大きい |
> |
左辺より右辺が大きいか同じ |
<= |
左辺が右辺より大きいか同じ |
>= |
記号 |
例 |
---|---|
&& または and |
true && true -> true、true && false -> false |
|| または or |
true || true -> true、true || false -> true、false || true->true、false || false->false |
! またはnot |
!true -> false |
ビット演算子
|
記号 |
例 |
---|---|---|
NOT |
~ |
~4 -> -5 |
AND |
& |
10 & 3 -> 2 |
OR |
| |
10 | 3->11 |
XOR |
^ |
10 ^ 3 -> 9 |
シフト演算で左へずらす |
<< |
10 << 3 -> 80 |
シフト演算で右へずらす |
>> |
10 >> 3 -> 1 |
三項演算子
x ? y : z の形の条件式です。
"x"を評価し、trueであれば"y"、そうでない場合は"z"を返します。
例:
(1 > 3) ? "a" : "b"
-> "b"
nilは許可されていない為、評価は失敗します。nil の扱いについては、ライブラリ > デフォルト値 のセクションをご参照ください。
文字列操作演算子
|
記号 |
例 |
---|---|---|
結合 |
+ (数字の足し算と同じ記号ですが、この場合は2つの文字列を使用します。) |
"a" + "b" -> "ab" |
特定の文字列が含まれているか判定 |
contains |
"abcd" contains "bc" -> true |
始まりの文字列を判定 |
startsWith |
"ab" startWith "a" -> true |
終わりの文字列を判定 |
endsWith |
"ab" endsWith "b" -> true |
データ構造 メンバーシップ演算子
"in"および"not"演算子が配列およびディクショナリに対して利用可能です。
例:
-
2 in [1, 2, 3] -> true
-
"foo" in {foo: 1, bar: 2} -> true
-
"baz" not in {foo: 1, bar: 2} -> true
データ構造 範囲演算子
例: 1..3 -> [1, 2, 3]
ライブラリ
デフォルト値
値がnilとなった場合に代替値が必要な場面で使用します。
default(x, y) または x != nil ? x : y
系列に補間が適用されている場合、"nil"は存在しないため、デフォルト関数が代替値を返すことはありません。
Math
ネームスペース: math
- 定数
記号 |
説明 |
---|---|
math.PI |
円周率π. https://oeis.org/A000796 |
math.E |
オイラーの定数. https://oeis.org/A001113 |
- 算術演算関数
|
関数 |
説明 |
例 |
---|---|---|---|
絶対値 |
math.Abs(x) |
Abs は x の絶対値を返します。 |
math.Abs(-42) -> 42 |
平方根 |
math.Sqrt(x) |
Sqrt は x の平方根を返します。 |
math.Sqrt(256) -> 16 |
四捨五入 |
math.Round(x) |
Round は最も近い整数に四捨五入した値を返します。 |
math.Round(99.6) -> 100 |
切り上げ |
math.Ceil(x) |
Ceil は x 以上の最小の整数を返します。 |
math.Ceil(0.42) -> 1 |
切り捨て |
math.Floor(x) |
Floor は x 以下の最大の整数を返します。 |
math.Floor(-0.42) -> -1 |
- 対数関数
|
関数 |
説明 |
例 |
---|---|---|---|
自然指数関数 |
math.Exp(x) |
Exp は然対数の底(ネイピア数)eのx乗を返します。 |
math.Exp(1.44) -> 4.220695816996552 |
自然対数 |
math.Ln(x) |
Ln は x の自然対数を返えします。 |
math.Ln(1.44) -> 0.36464311358790924 |
10進対数 |
math.Log(x) |
Log は x の 10 進対数を返します。 |
math.Log(1.44) -> 0.15836249209524964 |
- 三角関数
|
関数 |
説明 |
例 |
---|---|---|---|
サイン |
math.Sin(x) |
Sinはラジアン単位でxのサインを返します。 |
math.Sin(0.28) -> 0.27635564856411376 |
アークサイン |
math.Asin(x) |
Asinはラジアン単位でxのアークサインを返します。 |
math.Asin(0.28) -> 0.28379410920832787 |
コサイン |
math.Cos(x) |
Cosはラジアン単位でxのコサインを返します。 |
math.Cos(0.28) -> 0.9610554383107709 |
アークコサイン |
math.Acos(x) |
Acosはラジアン単位でxのアークコサインを返します。 |
math.Acos(0.28) -> 1.2870022175865687 |
タンジェント |
math.Tan(x) |
tanはラジアン単位でxのタンジェントを返します。 |
math.Tan(0.28) -> 0.28755432574197687 |
アークタンジェント |
math.Atan(x) |
Atanはラジアン単位でxのアークタンジェントを返します。 |
math.Atan(0.28) -> 0.2730087030867106 |
- 比較関数
|
関数 |
説明 |
例 |
---|---|---|---|
最小値 |
math.Min(x, y, ...) |
Minは与えられたすべての引数の中から最も小さい値を返します。 |
math.Min(99.9, 1.3, -55.3, -0.3) -> -55.3 |
最大値 |
math.Max(x, y, ...) |
Maxは与えられたすべての引数の中から最も大きい値を返します。 |
math.Max(99.9, 1.3, -55.3, -0.3) -> 99.9 |
Time
ネームスペース: time
提供されたデータの各ポイントは、データが記録された時刻を表す"t"と呼ばれる"time"オブジェクト を含んでいます。これは、データベース(またはその他のソース)から提供されるユニックス・ナノ秒のタイムスタンプの形式です。
時刻は、適切な場所の時刻を使用して変換されるため、複数のソースからのデータを処理することができます。
定数
月
|
記号 |
説明 |
値 |
---|---|---|---|
1月 |
time.JANUARY |
1月に対応する整数 |
1 |
2月 |
time.FEBRUARY |
2月に対応する整数 |
2 |
3月 |
time.MARCH |
3月に対応する整数 |
3 |
4月 |
time.APRIL |
4月に対応する整数 |
4 |
5月 |
time.MAY |
5月に対応する整数 |
5 |
6月 |
time.JUNE |
6月に対応する整数 |
6 |
7月 |
time.JULY |
7月に対応する整数 |
7 |
8月 |
time.AUGUST |
8月に対応する整数 |
8 |
9月 |
time.SEPTEMBER |
9月に対応する整数 |
9 |
10月 |
time.OCTOBER |
10月に対応する整数 |
10 |
11月 |
time.NOVEMBER |
11月に対応する整数 |
11 |
12月 |
time.DECEMBER |
12月に対応する整数 |
12 |
曜日
|
記号 |
説明 |
値 |
---|---|---|---|
日曜日 |
time.SUNDAY |
日曜日に対応する整数 |
1 |
月曜日 |
time.MONDAY |
月曜日に対応する整数 |
2 |
火曜日 |
time.TUESDAY |
火曜日に対応する整数 |
3 |
水曜日 |
time.WEDNESDAY |
水曜日に対応する整数 |
4 |
木曜日 |
time.THURSDAY |
木曜日に対応する整数 |
5 |
金曜日 |
time.FRIDAY |
金曜日に対応する整数 |
6 |
土曜日 |
time.SATURDAY |
土曜日に対応する整数 |
7 |
|
記号 |
説明 |
値 |
---|---|---|---|
冬 |
time.WINTER |
冬に対応する整数. 12月1日から2月28日まで |
1 |
春 |
time.SPRING |
春に対応する整数. 3月1日から5月31日まで |
2 |
夏 |
time.SUMMER |
夏に対応する整数. 6月1日から8月31日まで |
3 |
秋 |
time.AUTUMN |
秋に対応する整数. 9月1日から11月30日まで |
4 |
基本関数
|
関数 |
説明 |
例( t = 1998-07-12 20:02:42.000000385 +0000 UTCの場合) |
---|---|---|---|
ナノ秒 |
time.Nanosecond() |
Nanosecondは、tで指定された秒数内のナノ秒オフセットを[0, 999999999]の範囲で返します。 |
time.Nanosecond() -> 385 |
秒 |
time.Second() |
Second は、t で指定した分以内の秒オフセットを [0, 59] の範囲で返します。 |
time.Second() -> 42 |
分 |
time.Minute() |
Minute は、t で指定された時間内の分オフセットを [0, 59] の範囲で返します。 |
time.Minute() -> 02 |
時 |
time.Hour() |
Hourは、tで指定された日内の時間を[0, 23]の範囲で返します。 |
time.Hour() -> 20 |
日 |
time.Day() |
Day は、t で指定された月の日を返します。 |
time.Day() -> 12 |
週 |
time.Week() |
Weekは、tが発生するISO 8601の年と週の番号を返します。週番号の範囲は1から53までです。n年の1月1日から1月3日まではn-1年の52週目または53週目に属する可能性があり、12月29日から12月31日まではn+1年の1週目に属する可能性があります。 |
time.Week() -> 28 |
月 |
time.Month() |
Monthは、tで指定された年の月を返します。 |
time.Month() -> time.JULY |
年 |
time.Year() |
Yearはtで指定された年を返します |
time.Year() -> 1998 |
拡張関数
|
関数 |
説明 |
例(t = 1998-07-12 20:02:42.000000385 +0000 UTCの場合) |
---|---|---|---|
月の週 |
time.WeekOfMonth() |
WeekOfMonth は、ISO 8601 の計算に基づき、tで指定された月の週を返します。 |
time.WeekOfMonth() -> 2 |
年の日 |
time.DayOfYear() |
DayOfYearは、tで指定された年の曜日を、閏年でない場合は[1, 365]の範囲で、閏年の場合は[1, 366]の範囲で返します。 |
time.DayOfYear() -> 193 |
週の曜日 |
time.DayOfWeek() |
DayOfWeekは、tで指定された曜日を返します。 |
time.DayOfWeek() -> time.Sunday |
週末判定 |
time.IsWeekend() |
IsWeekendは、tで指定された曜日が土曜日か日曜日であればtrueを返し、そうでなければfalseを返します。 |
time.IsWeekend() -> true |
季節に関する関数
|
関数 |
説明 |
例(t = 1998-07-12 20:02:42.000000385 +0000 UTCの場合) |
---|---|---|---|
季節 |
time.Season() |
Seasonはtで指定された季節を返します。 |
time.Season() -> time.SUMMER |
季節が冬か確認 |
time.IsWinter() |
IsWinterは、tで指定された季節が冬であればtrueを、そうでなければfalseを返します。 |
time.IsWinter() -> false |
季節が春か確認 |
time.IsSpring() |
IsSpringは、tで指定された季節が春であればtrueを、そうでなければfalseを返します。 |
time.IsSpring() -> false |
季節が夏か確認 |
time.IsSummer() |
IsSummerは、tで指定された季節が夏であればtrueを、そうでなければfalseを返します。 |
time.IsSummer() -> true |
季節が秋か確認 |
time.IsAutumn() |
IsAutumnは、tで指定された季節が秋であればtrueを、そうでなければfalseを返します。 |
time.IsAutumn() -> false |
日付作成関数
|
関数 |
説明 |
例 |
---|---|---|---|
日付指定 |
time.Date(year, month, day, hour, min, sec, nsec) |
Date は、指定された年、月、日、時、分、秒、ナノ秒に対応する時刻を返します。 |
time.Date(1998, time.JULY, 12, 20, 02, 42, 385) -> 1998-07-12 20:02:42.000000385 +0000 UTC |
UNIXナノ秒から |
time.DateFromUnixNano(nanosec_timestamp) |
DateFromUnixNano は、指定された Unix のナノ秒タイムスタンプに対応する時刻を返します。 |
time.DateFromUnixNano(900273762000000385) -> 1998-07-12 20:02:42.000000385 +0000 UTC |
パース(文字列から抽出) |
time.Parse(datetime_string) |
Parseは、dd/mm/yyyyまたはdd/mm/yyyy hh:mm:ssレイアウトを使用してフォーマットされた文字列を解析し、それが表す時間値を返します。 |
time.Parse("12/07/1998") -> 1998-07-12 00:00:00.000000000 +0000 UTCtime.Parse("12/07/1998 20:02:42") -> 1998-07-12 20:02:42.000000000 +0000 UTC |
比較関数
|
関数 |
説明 |
例(t = 1998-07-12 20:02:42.000000385 +0000 UTCの場合) |
---|---|---|---|
以前 |
time.Before() |
beforeは、時刻tが引数の日時より前かどうかを返します。 |
time.Before(time.Date(2020, time.JULY, 10, 12, 0, 0, 0)) -> false |
以降 |
time.After() |
beforeは、時刻tが引数の日時より後かどうかを返します。 |
time.After(time.Date(2020, time.JULY, 10, 12, 0, 0, 0)) -> true |
等しい |
time.Equal() |
Equalは、tと引数の日時が同じ時刻を表しているかどうかを返します。2つの時刻が異なる場所にあっても等しいことがあります。例えば、6:00 +0200と4:00 UTCは等しいです。ほとんどのコードでは、==の代わりにEqualを使用する必要があります。 |
time.After(time.Date(2020, time.JULY, 10, 12, 0, 0, 0)) -> false |
フォーマット関数
|
関数 |
説明 |
例(t = 1998-07-12 20:02:42.000000385 +0000 UTCの場合) |
---|---|---|---|
RFC3339 |
time.Rfc3339() |
Rfc3339は、RFC3339に従ってフォーマットされた時間値のテキスト表現を返します。 |
time.Rfc3339() -> 1998-07-12T20:02:42Z |
UNIX ナノ秒 |
time.UnixNano() |
UnixNanoは、1970年1月1日UTCからの経過ナノ秒数であるUnix時間としてtを返します。ナノ秒単位のUnix時間がint64(1678年以前の日付または2262年以降の日付)で表現できない場合、結果は未定義となります。これは、ゼロTimeでUnixNanoを呼び出した結果が未定義であることを意味することに注意してください。結果はtに関連付けられた場所に依存しません。 |
time.UnixNano() -> 900273762000000385 |
このリストに関数が見つからない場合は、METRON のオペレーションエンジニアに連絡してください。