MenuToggle Menu

函数

函数是执行特定任务的预定义公式。函数通常“接收”一些数据作为输入,对齐进行处理,然后“得出”结果。

常见的任务示例:

  • 计算文本中包含的字符数
  • 在文本中搜索特定文本
  • 判断两个数值中最小的值

函数通常具有以下结构:

  • function(argument: TYPE) → 结果值: TYPE
  • function(argument1: TYPE, argument2: TYPE) → 结果值: TYPE
  • function(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"
  • 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"
    • 例如parseJson(var, "key"),这里,var 是存储 JSON 字符串的文本变量,"key" 是要解析的键。后者支持使用.(点号)分隔的方式对key进行嵌套调用以及对数组/泛型等这类对象进行简单引用。

      parseJson 函数大大简化了 ProtoPie 中复杂数据结构的处理。 此外,由于大多数 API 响应都是 JSON 格式,因此能够在 Pie文件中使用parseJson使得使用 API 更加直接。

      可以使用parseJson函数:

    • 通过 ProtoPie Connect 中的 Bridge 应用程序将 JSON 字符串发送到Pie文件(例如,消息:“AutomobileSignal”,值:“json string”)。
    • 通过 Receive 触发器将值存储在 Pie 变量中。
    • 使用 JSON 字符串中的数据值。
    • 要了解更多信息,请查看此 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

    将RGB的色值转化为FFFFFF

    • 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).propertyTEXT 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).propertyTEXT 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 中使用函数,了解本文提到的几个特定功能的详细示例和指导。

Back To Top