函数
函数是执行特定任务的预定义公式。函数通常“接收”一些数据作为输入,对齐进行处理,然后“得出”结果。
常见的任务示例:
- 计算文本中包含的字符数
- 在文本中搜索特定文本
- 判断两个数值中最小的值
函数通常具有以下结构:
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(x: NUMBER, y: 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坐标。
想要探索更多ProtoPie的功能?加入 ProtoPie 大师课!学习关于如何在 ProtoPie 中使用函数,了解本文提到的几个特定功能的详细示例和指导。