関数
関数:特定のタスクを実行するためにデフォルトで準備した数式です。 関数は通常、データを取り込み、処理し、結果を表示します。
タスクの例:
- テキストに含まれる文字数を計算します。
- テキスト内の特定の単語を検索します。
- どちらの数が2つの数の最小であるかを決定します。
関数は通常、次の構造になっています
function(argument:TYPE)
→結果:TYPEfunction(argument1:TYPE、argument2:TYPE)
→結果:TYPEfunction(argument1:TYPE、argument2:TYPE、argument3:TYPE)
→結果:TYPE
関数は通常、タスクを実行するために1つまたは複数のデータを入力として受け取ります。引数と結果は、常に特定のタイプです。タイプは、テキスト、数字、または色に設定することができます。
選択できるカテゴリは以下の通りです。
Text
concat(source1: TEXT, source2: TEXT)
TEXT2つの異なるテキストを1つにします
Example:concat("hello", "world")"helloworld"
indexOf(source: TEXT, searchValue: TEXT)
NUMBERテキスト内のキーワードの先頭位置を見つけます。 キーワードがテキストに存在しない場合、戻り値は-1となります。
Example:indexOf("hello world", "world")6
Example:indexOf("hello world", "hello")0
Example:indexOf("hello world", "goodbye")-1
- 電子メールの検証などの具体例にはindexOfを使用してください。詳細例はこちらをご覧ください。
length(source: TEXT)
NUMBERテキスト内の文字数をカウントします。
Example:length("hello")5
Example:length("helloworld")10
Example:length("hello world")11
- パスワードの長さを認証などを設定する時に使用します。詳細例はこちらをご覧ください。
lowerCase(source: TEXT)
TEXT大文字のテキストを小文字に変換、または小文字のテキストを大文字に変換します。
Example:lowerCase("Hello")"hello"
upperCase(source: TEXT)
TEXT大文字のテキストを小文字に変換、または小文字のテキストを大文字に変換します。
Example:upperCase("Hello")"HELLO"
left(source: TEXT, count: NUMBER)
TEXTテキストの左または右から任意の数の文字を抽出します。
Example:left("hello", 3)"hel"
right(source: TEXT, count: NUMBER)
TEXTテキストの左または右から任意の数の文字を抽出します。
Example:right("hello", 2)"lo"
lpad(source: TEXT, length: NUMBER, pad: TEXT)
TEXT好みの長さになるように、テキストの左側あるいは右側に入力した文字を追加します。
Example:lpad("5", 2, "0")"05"
Example:lpad("5", 4, "0")"0005"
rpad(source: TEXT, length: NUMBER, pad: TEXT)
TEXT好みの長さになるように、テキストの左側あるいは右側に入力した文字を追加します。
Example:rpad("5", 2, "1")"51"
Example:rpad("5", 6, "1")"511111"
repeat(source: TEXT, count: NUMBER)
TEXT指定されたテキストに対して、指定された回数だけ入力操作を繰り返します。
Example:repeat("hello", 2)"hellohello"
Example:repeat("hello", 3)"hellohellohello"
replace(source: TEXT, from: TEXT, to: TEXT)
TEXTテキストの指定された部分を、他のテキストに置き換えます
Example:replace("helloworld", "world", "protopie")"helloprotopie"
Example:replace("goodbye, John", "goodbye", "thank you")"thank you, John"
trim(source: TEXT)
TEXTテキストの両側の空白を削除します
Example:trim(" helloworld ")"helloworld"
Example:trim(" helloworld ")"helloworld"
ltrim(source: TEXT)
TEXTテキストの左側または右側の空白を削除します
Example:ltrim(" helloworld ")"helloworld "
rtrim(source: TEXT)
TEXTテキストの左側または右側の空白を削除します
Example:rtrim(" helloworld ")" helloworld"
regexextract(source: TEXT, regular expression: TEXT)
TEXT提供された正規表現と一致するテキストの最初のサブストリングを抽出します。
Example:regexextract("Google Doc 101", "[0-9]+")"101"
Example:regexextract("The price today is $826.25", "[0-9]*\.[0-9]+[0-9]+")"826.25"
regexreplace(source: TEXT, regular expression: TEXT, replacement: TEXT)
TEXT正規表現を使用してテキスト・ストリングの一部を他のテキストに置き換えます。
Example:regexreplace("Google Doc 101", "[0-9]+", "777")"Google Doc 777"
Example:regexreplace("The price today is $826.25", "[0-9]*\.[0-9]+[0-9]+", "315.75")"The price is $315.75"
parseJson(source: TEXT, key: TEXT)
TEXT有効なJSONストリングを分析した後、その値を戻します。
Example:parseJson("{\"name\":\"John\", \"age\":30, \"car\":null}", "age")"30"
Example:parseJson("{\"name\":\"John\", \"age\":30, \"car\":null}", "name")"John"
- ProtoPie Connect内のBridgeアプリ(例;メッセージ:「AutomobileSignal」、値:「json string」)を利用してPieにJSONストリングを転送することができます。
- Receiveトリガーにより、Pie変数内の値を保存することができます。
- JSONストリング内でデータ値を活用することができます。
parseJson(var、"key")を例として取り上げます。ここでvarはJSONストリングを保存するテキスト変数で、"key"は分析するキーに該当します。キーはネストされたキー呼び出し及び配列風オブジェクトなど、単純なレファレンスに対応します。また、この場合は . (ドット)を使用します。
parseJson関数により、ProtoPie内の複雑なデータ構造作業を大幅に減らすことができます。また、大半のAPI応答はJSON形式で行われるため、Pies内でparseJsonを活用してAPIの作業を簡単に行うことができます。
parseJson関数により、以下の作業を行うことができます。
こちらのPieの例から詳細をご確認いただけます。
Math
pow(source: NUMBER, exponent: NUMBER)
NUMBER最初の数値を2番目の数値で累乗した結果を計算します。
Example:pow(2, 3)8
sqrt(source: NUMBER)
NUMBER入力された数値の平方を計算します。入力した数値が負の場合は計算されません。
Example:sqrt(9)3
Example:sqrt(2)1.41
min(source1: NUMBER, source2: NUMBER)
NUMBER複数の数の最小値または最大値を選択します
Example:min(0, 1)0
max(source1: NUMBER, source2: NUMBER)
NUMBER複数の数の最大値を選択します
Example:max(0, 1)1
abs(value: NUMBER)
NUMBER入力された数値の絶対値を抽出します。(負の記号は削除されます)
Example:abs(-1)1
Example:abs(5 - 25)20
sign(value: NUMBER)
NUMBER入力された数値が正であるか負かを判別します。正の値は1、負の値は-1での値が抽出されます。0を入力すると、結果の値も0になります。
Example:sign(5)1
Example:sign(-10)-1
Example:sign(0)0
round(source: NUMBER)
NUMBER入力された値を四捨五入します。
Example:round(3.49)3
Example:round(1.5)2
Example:round(6.79)7
floor(source: NUMBER)
NUMBER入力された数字を切り捨て、あるいは切り上げます。
Example:floor(1.5)1
Example:floor(2.99)2
ceil(source: NUMBER)
NUMBER入力された数字を切り捨て、あるいは切り上げます。
Example:ceil(1.5)2
Example:ceil(4.3)5
random()
NUMBER0から1までランダムな数値
Example:random()0から1までの数値をランダムに選びます
random(min: NUMBER, max: NUMBER)
NUMBER0と1の間の小数をランダムに抽出します。2つの数値を入力すると、両者の間にある数字をランダムに抽出します。
Example:random(1, 5)1から5までの数字をランダムに選びます
randomInt(min: NUMBER, max: NUMBER)
NUMBER入力された2つの整数をランダムに抽出
Example:randomInt(1, 5)1から5までの整数をランダムに選びます
radians(degrees: NUMBER)
NUMBER角度の値をラジアン(弧度)に変換します。
Example:radians(180)3.14 = π
Example:radians(90)1.57 = π / 2
degrees(radians: NUMBER)
NUMBERラジアン値(弧度)を角度値に変換します
Example:degrees($pi)180
Example:degrees($pi / 2)90
sin(radian: NUMBER)
NUMBERラジアンのサイン値を計算します。
Example:sin($pi / 2)1
Example:sin($pi / 6)0.5
cos(radian: NUMBER)
NUMBERラジアンのコサイン値を計算します。
Example:cos(0)1
Example:cos($pi / 2)0
tan(radian: NUMBER)
NUMBERラジアンのタンジェント値を計算します。
Example:tan($pi / 4)1
Example:tan(0)0
asin(x: NUMBER)
NUMBERラジアンで、xのアークサイン値を計算します。
Example:asin(1)1.57 = π / 2
Example:asin(0.5)0.52 = π / 6
acos(x: NUMBER)
NUMBERxのアークコサイン(ラジアン)を計算します。
Example:acos(1)0
Example:acos(0)1.57 = π / 2
atan(x: NUMBER)
NUMBERxのアークタンジェント(ラジアン)を計算します。
Example:atan(1)0.79 = π / 4
Example:atan(0)0
atan2(y: NUMBER, x: NUMBER)
NUMBERラジアンで、xとyのアークタンジェント値を計算します。
Example:atan2(1, 0)1.57 = π / 2
Example:atan2(1, 1)0.79 = π / 4
Color
color(red: NUMBER, green: NUMBER, blue: NUMBER)
COLORRGB値を基本とするカラーコードに変換します。
Example:color(255, 255, 255)#FFFFFF
Example:color(255, 102, 97)#FF6661
red(source: COLOR)
NUMBER16進カラー値をRGBに変換し、赤を抽出します。
Example:red(#FF0000)255
Example:red(#008000)0
Example:red(#0000FF)0
green(source: COLOR)
NUMBER16進カラー値をRGBに変換し、緑を抽出します。
Example:green(#FF0000)0
Example:green(#008000)128
Example:green(#0000FF)0
blue(source: COLOR)
NUMBER16進カラー値をRGBに変換し、青を抽出します。
Example:blue(#FF0000)0
Example:blue(#008000)0
Example:blue(#0000FF)255
Type Conversion
number(source: TEXT)
NUMBERテキストを数字に変換します。 テキストを数値に変換できない場合、この操作は無効です。
Example:number("1234")1234
Example:number("94.27")94.27
text(source: NUMBER)
TEXT数字をテキストに変更します。
Example:text(1234)"1234"
Example:text(94.27)"94.27"
Example:text(1 + 3)"4"
format(source: NUMBER, format: TEXT)
TEXT数字をテキスト形式に変換します。#で整数桁を、0に小数点以下の桁を表示することができます。
Example:format(1234.567, "#")"1235"
Example:format(1234.567, "#,###")"1,235"
Example:format(1234.567, "#.###,00")"1.234,57"
Example:format(1234.567, "#,##.00")"12,34.57"
Example:format(1234.567, "#,###.00")"1,234.57"
color(source: TEXT)
COLORテキストを16進カラー値に変換します。 テキストが16進カラーをサポートしている場合にのみ使用可能です。
Example:color("#FFFFFF")#FFFFFF
Layers
layer(source: TEXT)
LAYERレイヤーまたはレイヤープロパティを使用します。
- 式やその他の関数の一部として使用できます
layer(source: TEXT).property
TEXT or NUMBERレイヤーまたはレイヤープロパティを使用します。 レイヤーのプロパティ詳細についてはこちらをご覧ください。
Example:layer("Rectangle 1").xRectangle 1 图层的X坐标
Example:layer("Oval 1").opacityOval 1 图层的透明度
Example:layer("Input 1").textInput 1 图层的文字
parent(layerName: LAYER)
LAYER上層のプロパティ(コンテナ層、コンポーネントなど)を使用します。
- 式やその他の関数の一部として使用できます
parent(layerName: LAYER).property
TEXT or NUMBER上層のプロパティ(コンテナ層、コンポーネントなど)を使用します。 レイヤーのプロパティの詳細についてはこちらをご覧ください。
Example:parent(`Rectangle 1`).xRectangle 1 上層のX座標
Example:parent(`Oval 1`).opacityOval 1 層の上層の透明度
initial(layerName: LAYER, layerProperty: TEXT)
TEXT or NUMBER特定のレイヤーのプロパティのインタラクション適用前の初期設定値を変換します。レイヤーのプロパティの詳細については、こちらをご参照ください。
Example:initial(`Rectangle 1`, "x")Rectangle 1レイヤーのx座標の初期値
Example:initial(`Oval 1`, "opacity")Oval 1レイヤーの透明度の初期値
Example:initial(`Input 1`, "text")Input1のテキストの初期値
Relative Coordinates
toLayerX(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBERコンテナレイヤーまたはコンポーネントを基準にしてx座標を計算します。 コンテナまたはコンポーネント内のレイヤーは、それらが配置されているコンテナまたはコンポーネントを基準にした座標に従います。
- 例)画面に対する相対位置(100, 200)に基づいてコンテナ内のx座標を取得する場合は、次の関数を使用します。
toLayerX(`Container 1`, 100, 200)画面の位置x = 100を基準にして、コンテナ1のx座標を取得します。
toLayerY(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBERコンテナレイヤーまたはコンポーネントを基準にしてy座標を計算します。 コンテナまたはコンポーネント内のレイヤーは、それが配置されているコンテナまたはコンポーネントを基準にした座標に従います。
- たとえば、画面(100, 200)に対する相対位置に基づいてコンテナ内のy座標を取得する場合は、次の関数を使用します。
toLayerY(`Container 1`, 100, 200)画面の位置y = 200を基準にして、コンテナ1のy座標を取得します。
toScreenX(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER画面を基準にしてx座標を計算します。 コンテナまたはコンポーネント内のレイヤーは、それが配置されているコンテナまたはコンポーネントを基準にした座標に従います。
- たとえば、相対的なコンテナレイヤーまたはコンポーネントの位置(10, 20)に基づいて画面のx座標を取得する場合は、次の関数を使用します。
toScreenX(`Container 1`, 10, 20)コンテナ1コンテナレイヤーx = 10の位置を基準にして、画面のx座標を取得します。
toScreenY(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER画面を基準にしてy座標を計算します。 コンテナまたはコンポーネント内のレイヤーは、それが配置されているコンテナまたはコンポーネントを基準にした座標に従います。
- たとえば、相対的なコンテナレイヤーまたはコンポーネントの位置(10, 20)に基づいて画面のy座標を取得する場合は、次の関数を使用します。
toScreenY(`Container 1`, 10, 20)コンテナ1コンテナレイヤーy = 20の位置を基準にして、画面のy座標を取得します。
timeNow()
TEXTExample:timeNow()
time(hour: NUMBER, min: NUMBER, sec: NUMBER)
TEXTExample:time(14, 50, 23)
hour()
NUMBERExample:hour("17:44:30")
minute()
NUMBERExample:minute("17:44:30")
second()
NUMBERExample:second("17:44:30")
diffTime()
NUMBERExample:diffTime("17:45:30", "18:45:30", "H")
Example:diffTime("17:45:30", "18:45:30", "M")
Example:diffTime("17:45:30", "18:45:30", "S")
formatTime()
TEXTExample:formatTime("11:44:30", "HHa")
Example:formatTime("11:44:30", "HHam mm")
Example:formatTime("11:44:30", "hh:mm a")
dateNow()
TEXTExample:dateNow()
date(year: NUMBER, month: NUMBER, day: NUMBER)
TEXTExample:date(2014, 12, 8)
year()
NUMBERExample:year("2014-12-08")
month()
NUMBERExample:month("2014-12-08")
day()
NUMBERExample:day("2014-12-08")
diffDate()
NUMBERExample:diffDate("1973-02-24", "1969-05-16", "Y")
Example:diffDate("1973-02-24", "1969-05-16", "M")
Example:diffDate("1973-02-24", "1969-05-16", "D")
Example:diffDate("1969-05-16", "1973-02-24", "Y")
Example:diffDate("1969-05-16", "1973-02-24", "M")
Example:diffDate("1969-05-16", "1973-02-24", "D")
Example:diffDate("1969-05-16", "1973-02-24", "MD")
Example:diffDate("2023-01-01", "2023-02-10", "MD")
Example:diffDate("1969-05-16", "1973-02-24", "YM")
Example:diffDate("1969-05-16", "1973-02-24", "YD")
Example:diffDate("2023-01-01", "2023-02-10", "YD")
formatDate()
TEXTExample:formatDate("2023-06-01", "DD/MM/YYYY")
Example:formatDate("2023-06-01", "YYYY MMMM dddd")
Example:formatDate("2023-06-01", "MMM DD, YY")
epochtodate(timestamp: NUMBER)
TEXTExample:epochtodate(0)
Example:epochtodate(-1)
Example:epochtodate(1)
Example:epochtodate(1655908429662)
epochtodate(timestamp: NUMBER, format: TEXT)
TEXTExample:epochtodate(1695316200000)
Example:epochtodate(1695316200000, "hh:mm")
ProtoPieでの関数の活用についてもっと知りたいですか?ProtoPieのマスタークラスに登録すると、ここで説明している関数機能のさまざまな活用方法に関する詳しい例やガイドをご覧いただけます。