函数
函数是执行特定任务的预定义公式。函数通常“接收”一些数据作为输入,对齐进行处理,然后“得出”结果。
常见的任务示例:
- 计算文本中包含的字符数
- 在文本中搜索特定文本
- 判断两个数值中最小的值
函数通常具有以下结构:
function(argument: TYPE)
→ 结果值: TYPEfunction(argument1: TYPE, argument2: TYPE)
→ 结果值: TYPEfunction(argument1: TYPE, argument2: TYPE, argument3: TYPE)
→ 结果值: TYPE
函数通常采用一个或多个数据作为输入值。输入值和结果值使用文本、数字或颜色等特定类型的值。
文本
concat(source1: TEXT, source2: TEXT)
TEXT将两个文本内容合并
例concat("hello", "world")"helloworld"
indexOf(source: TEXT, searchValue: TEXT)
NUMBER在文本中找到特定单词开始的位置。如果没有找到指定内容则输入值为-1。
例indexOf("hello world", "world")6
例indexOf("hello world", "hello")0
例indexOf("hello world", "goodbye")-1
- 查看实际案例 ,在邮件认证原型中使用indexOf函数。
length(source: TEXT)
NUMBER求文本长度
例length("hello")5
例length("helloworld")10
例length("hello world")11
- 查看实际案例 ,在密码验证原型中使用length函数。
lowerCase(source: TEXT)
TEXT将大写字母的文本转换成小写的文本
例lowerCase("Hello")"hello"
upperCase(source: TEXT)
TEXT将小写字母的文本转换成大写的文本
例upperCase("Hello")"HELLO"
left(source: TEXT, count: NUMBER)
TEXT从文本左侧开始,输出想要数字的前几个字符。
例left("hello", 3)"hel"
right(source: TEXT, count: NUMBER)
TEXT从文本右侧开始,输出想要数字的前几个字符。
例right("hello", 2)"lo"
lpad(source: TEXT, length: NUMBER, pad: TEXT)
TEXT在输入的文本左侧进行填充以达到期望的长度
例lpad("5", 2, "0")"05"
例lpad("5", 4, "0")"0005"
rpad(source: TEXT, length: NUMBER, pad: TEXT)
TEXT在输入的文本右侧进行填充以达到期望的长度
例rpad("5", 2, "1")"51"
例rpad("5", 6, "1")"511111"
repeat(source: TEXT, count: NUMBER)
TEXT对指定文本以指定次数进行重复输入操作
例repeat("hello", 2)"hellohello"
例repeat("hello", 3)"hellohellohello"
replace(source: TEXT, from: TEXT, to: TEXT)
TEXT将文本中指定部分替换成其他的内容
例replace("helloworld", "world", "protopie")"helloprotopie"
例replace("goodbye, John", "goodbye", "thank you")"thank you, John"
trim(source: TEXT)
TEXT去除文本两边的空白
例trim(" helloworld ")"helloworld"
例trim(" helloworld ")"helloworld"
ltrim(source: TEXT)
TEXT去除文本左侧的空白
例ltrim(" helloworld ")"helloworld "
rtrim(source: TEXT)
TEXT去除文本右侧的空白
例rtrim(" helloworld ")" helloworld"
regexextract(source: TEXT, regular expression: TEXT)
TEXT提取与表达式匹配文本的第一个子字符串。
例regexextract("Google Doc 101", "[0-9]+")"101"
例regexextract("The price today is $826.25", "[0-9]*\.[0-9]+[0-9]+")"826.25"
regexreplace(source: TEXT, regular expression: TEXT, replacement: TEXT)
TEXT使用正则表达式将文本字符串的一部分替换为不同的文本字符串。
例regexreplace("Google Doc 101", "[0-9]+", "777")"Google Doc 777"
例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 字符串并返回相应的值。
例parseJson("{\"name\":\"John\", \"age\":30, \"car\":null}", "age")"30"
例parseJson("{\"name\":\"John\", \"age\":30, \"car\":null}", "name")"John"
- 通过 ProtoPie Connect 中的 Bridge 应用程序将 JSON 字符串发送到Pie文件(例如,消息:“AutomobileSignal”,值:“json string”)。
- 通过 Receive 触发器将值存储在 Pie 变量中。
- 使用 JSON 字符串中的数据值。
例如parseJson(var, "key"),这里,var 是存储 JSON 字符串的文本变量,"key" 是要解析的键。后者支持使用.(点号)分隔的方式对key进行嵌套调用以及对数组/泛型等这类对象进行简单引用。
parseJson 函数大大简化了 ProtoPie 中复杂数据结构的处理。 此外,由于大多数 API 响应都是 JSON 格式,因此能够在 Pie文件中使用parseJson使得使用 API 更加直接。
可以使用parseJson函数:
要了解更多信息,请查看此 Pie 文件。
数学
pow(source: NUMBER, exponent: NUMBER)
NUMBER取number1的number2阶乘值
例pow(2, 3)8
sqrt(source: NUMBER)
NUMBER取平方根,如果数字是负数则显示锗误。
例sqrt(9)3
例sqrt(2)1.41
min(source1: NUMBER, source2: NUMBER)
NUMBER取多个数字中的最小值
例min(0, 1)0
max(source1: NUMBER, source2: NUMBER)
NUMBER取多个数字中的最大值
例max(0, 1)1
abs(value: NUMBER)
NUMBER取数字的绝对值,也用于删除负数前面的负号。
例abs(-1)1
例abs(5 - 25)20
sign(value: NUMBER)
NUMBER判断输入的数字是正数还是负数。正数返回1,负数返回-1,值为0时返回0。
例sign(5)1
例sign(-10)-1
例sign(0)0
round(source: NUMBER)
NUMBER四舍五入的整数值
例round(3.49)3
例round(1.5)2
例round(6.79)7
floor(source: NUMBER)
NUMBER去掉小数点后的整数
例floor(1.5)1
例floor(2.99)2
ceil(source: NUMBER)
NUMBER去掉小数点后整数进1
例ceil(1.5)2
例ceil(4.3)5
random()
NUMBER在0和1中随机取得一个数字
例random()在0和1中随机取得一个数字
random(min: NUMBER, max: NUMBER)
NUMBER在指定区间内随机取得一个数字
例random(1, 5)随机取1到5之间的一个数字
randomInt(min: NUMBER, max: NUMBER)
NUMBER在指定区间内随机取得一个整数
例randomInt(1, 5)随机取1到5之间的一个整数
radians(degrees: NUMBER)
NUMBER将角度值转换为弧度值
例radians(180)3.14 = π
例radians(90)1.57 = π / 2
degrees(radians: NUMBER)
NUMBER将弧度值转换为角度值
例degrees($pi)180
例degrees($pi / 2)90
sin(radian: NUMBER)
NUMBER取弧度的sin值
例sin($pi / 2)1
例sin($pi / 6)0.5
cos(radian: NUMBER)
NUMBER取弧度的cos值
例cos(0)1
例cos($pi / 2)0
tan(radian: NUMBER)
NUMBER取弧度的tan值
例tan($pi / 4)1
例tan(0)0
asin(x: NUMBER)
NUMBER计算x的反正弦值
例asin(1)1.57 = π / 2
例asin(0.5)0.52 = π / 6
acos(x: NUMBER)
NUMBER计算x的反余弦值
例acos(1)0
例acos(0)1.57 = π / 2
atan(x: NUMBER)
NUMBER计算x的反正切值
例atan(1)0.79 = π / 4
例atan(0)0
atan2(y: NUMBER, x: NUMBER)
NUMBER计算x和y的反正切值
例atan2(1, 0)1.57 = π / 2
例atan2(1, 1)0.79 = π / 4
颜色
color(red: NUMBER, green: NUMBER, blue: NUMBER)
COLOR例color(255, 255, 255)#FFFFFF
例color(255, 102, 97)#FF6661
red(source: COLOR)
NUMBER将十六进制的色值转化为RGB后提取其中的红色值
例red(#FF0000)255
例red(#008000)0
例red(#0000FF)0
green(source: COLOR)
NUMBER将十六进制的色值转化为RGB后提取其中的绿色值
例green(#FF0000)0
例green(#008000)128
例green(#0000FF)0
blue(source: COLOR)
NUMBER将十六进制的色值转化为RGB后提取其中的蓝色值
例blue(#FF0000)0
例blue(#008000)0
例blue(#0000FF)255
类型转换
number(source: TEXT)
NUMBER将文本格式里的数字转换为数字格式。如果无法将文本转换为数字,则此操作无效。
例number("1234")1234
例number("94.27")94.27
text(source: NUMBER)
TEXT将数字格式转换为文本格式
例text(1234)"1234"
例text(94.27)"94.27"
例text(1 + 3)"4"
format(source: NUMBER, format: TEXT)
TEXT将数字转换为文本格式 #代表整数,0代表分数。
例format(1234.567, "#")"1235"
例format(1234.567, "#,###")"1,235"
例format(1234.567, "#.###,00")"1.234,57"
例format(1234.567, "#,##.00")"12,34.57"
例format(1234.567, "#,###.00")"1,234.57"
color(source: TEXT)
COLOR将文本转换为十六进制的颜色值。文本支持十六进制颜色值结构时,才可使用。
例color("#FFFFFF")#FFFFFF
图层
layer(source: TEXT)
LAYER使用图层
- 可以将其用于表达式和其他函数的一部分
layer(source: TEXT).property
TEXT or NUMBER使用图层属性。了解更多关于图层属性的内容。
例layer("Rectangle 1").xRectangle 1 图层的X坐标
例layer("Oval 1").opacityOval 1 图层的透明度
例layer("Input 1").textInput 1 图层的文字
parent(layerName: LAYER)
LAYER使用上级图层(容器层和组件等)
- 可以将其用于表达式和其他函数的一部分
parent(layerName: LAYER).property
TEXT or NUMBER使用上级图层(容器层和组件等)的属性。了解更多关于图层属性的内容。
例parent(`Rectangle 1`).xRectangle 1 图层的上级图层X坐标
例parent(`Oval 1`).opacityOval 1 图层的上级图层透明度
initial(layerName: LAYER, layerProperty: TEXT)
TEXT or NUMBER使用特定图层属性的初始值(在执行任何交互前的值)。了解更多关于图层属性的内容。
例initial(`Rectangle 1`, "x")Rectangle 1 图层的x坐标初始值
例initial(`Oval 1`, "opacity")Oval 1 图层的透明度初始值
例initial(`Input 1`, "text")Input 1 图层的文字初始值
相对坐标
toLayerX(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER计算相对于容器层或组件的x坐标。容器层或组件中的图层遵循相对于其所在的容器或组件的坐标。
- 例如,如果要基于相对于屏幕的位置(100,200)获取容器内的x坐标,请使用以下函数。
toLayerX(`Container 1`, 100, 200)相对于画面x=100的位置,获取Container 1的x坐标。
toLayerY(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER计算相对于容器层或组件的y坐标。容器层或组件中的图层遵循相对于其所在的容器或组件的坐标。
- 例如,如果要基于相对于屏幕的位置(100,200)获取容器内的y坐标,请使用以下函数。
toLayerY(`Container 1`, 100, 200)相对于画面y=200的位置,获取Container 1的y坐标。
toScreenX(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER计算相对于屏幕的x坐标。容器层或组件中的图层遵循相对于其所在的容器或组件的坐标。
- 例如,如果要基于相对容器层或组件位置(10,20)获取画面内的x坐标,请使用以下函数。
toScreenX(`Container 1`, 10, 20)相对于Container 1 容器层x=10的位置,获取画面的x坐标。
toScreenY(containerName: LAYER, x: NUMBER, y: NUMBER)
NUMBER计算相对于屏幕的y坐标。容器层或组件中的图层遵循相对于其所在的容器或组件的坐标。
- 例如,如果要基于相对容器层或组件位置(10,20)获取画面内的y坐标,请使用以下函数。
toScreenY(`Container 1`, 10, 20)相对于Container 1 容器层y=20的位置,获取画面的y坐标。
时间和日期
注意:时间和日期函数遵循ISO8601格式。
timeNow()
TEXT获取当前时间信息。
例timeNow()17:44:50.123
time(hour: NUMBER, min: NUMBER, sec: NUMBER)
TEXT使用提供的小时、分钟和秒值构造一个时间对象,以标准的“小时:分钟:秒”格式表示时间。
例time(14, 50, 23)14:50:23
hour()
NUMBER从以24小时制表示的时间中提取并返回小时组件。此函数以时间值作为输入并提取小时部分,以数值形式返回。
例hour("17:44:30")17
minute()
NUMBER从以24小时制表示的时间中提取并返回分钟组件。此函数以时间值作为输入并提取分钟部分,以数值形式返回。
例minute("17:44:30")44
second()
NUMBER从以24小时制表示的时间中提取并返回秒组件。此函数以时间值作为输入并提取秒部分,以数值形式返回。
例second("17:44:30")30
diffTime()
NUMBER计算两个时间点之间的差异,通常以小时、分钟和秒表示。此函数以两个时间值作为输入,计算它们之间的时间持续时间或时间间隔,并以小时、分钟和/或秒的形式提供结果。
例diffTime("17:45:30", "18:45:30", "H")1
例diffTime("17:45:30", "18:45:30", "M")60
例diffTime("17:45:30", "18:45:30", "S")3600
formatTime()
TEXT将时间值转换为可读的字符串表示,遵循指定的格式模式。此函数接受时间值作为输入,并返回符合提供的格式模式的格式化字符串。
例formatTime("11:44:30", "HHa")11am
例formatTime("11:44:30", "HHam mm")11am 44
例formatTime("11:44:30", "hh:mm a")11:40 am
dateNow()
TEXT获取并返回当前执行时刻的日期。
例dateNow()2023-09-22
date(year: NUMBER, month: NUMBER, day: NUMBER)
TEXT用提供的年、月和日值构造日期对象,以标准的“年-月-日”格式表示日期。
例date(2014, 12, 8)2014-12-08
year()
NUMBER从“年-月-日”格式的日期字符串中提取并返回年份组件。此函数以日期值作为输入并提取年份部分,以数值形式返回。
例year("2014-12-08")2014
month()
NUMBER从“年-月-日”格式的日期字符串中提取并返回月份组件。此函数以日期值作为输入并提取月份部分,以数值形式返回。
例month("2014-12-08")12
day()
NUMBER从“年-月-日”格式的日期字符串中提取并返回日期组件。此函数以日期值作为输入并提取日期部分,以数值形式返回。
例day("2014-12-08")8
diffDate()
NUMBER计算两个日期之间的差异,并将其作为数字值基于指定的时间单位返回。此函数以两个日期值作为输入,并可选使用时间单位("Y"代表年,"M"代表月,"D"代表日)来指定所需的差异。
例diffDate("1973-02-24", "1969-05-16", "Y")-1
例diffDate("1973-02-24", "1969-05-16", "M")-1
例diffDate("1973-02-24", "1969-05-16", "D")-1
例diffDate("1969-05-16", "1973-02-24", "Y")3
例diffDate("1969-05-16", "1973-02-24", "M")45
例diffDate("1969-05-16", "1973-02-24", "D")1380
例diffDate("1969-05-16", "1973-02-24", "MD")8
例diffDate("2023-01-01", "2023-02-10", "MD")9
例diffDate("1969-05-16", "1973-02-24", "YM")9
例diffDate("1969-05-16", "1973-02-24", "YD")284
例diffDate("2023-01-01", "2023-02-10", "YD")40
formatDate()
TEXT接受日期值和格式字符串作为输入,并根据提供的模式返回格式化的日期字符串。
例formatDate("2023-06-01", "DD/MM/YYYY")01/06/2023
例formatDate("2023-06-01", "YYYY MMMM dddd")2023 June Thursday
例formatDate("2023-06-01", "MMM DD, YY")Jun 01, 23
epochtodate(timestamp: NUMBER)
TEXT用于将以毫秒为单位的Unix纪元时间戳转换为UTC(协调世界时)中的DateTime表示。函数以格式$epochToDate(timestamp: NUMBER)调用,其中timestamp表示以毫秒为单位的Unix纪元时间戳。
例epochtodate(0)1970-01-01T00:00:00Z
例epochtodate(-1)1969-12-31T23:59:59.999Z
例epochtodate(1)1970-01-01T00:00:00.001Z
例epochtodate(1655908429662)2022-06-22T14:33:49.662Z
epochtodate(timestamp: NUMBER, format: TEXT)
TEXT允许将Unix时间戳格式化为可读的日期和时间表示。它接受以毫秒为单位的Unix时间戳作为timestamp参数,并可选使用format参数来指定所需的输出格式。
例epochtodate(1695316200000)2023-09-21T17:10:00Z
例epochtodate(1695316200000, "hh:mm")17:10
想要探索更多ProtoPie的功能?加入 ProtoPie 大师课!学习关于如何在 ProtoPie 中使用函数,了解本文提到的几个特定功能的详细示例和指导。