函数操作是现代编程领域中的核心概念之一,它以类似 Excel 表格的方式进行数据处理和计算。它的特点是使用公式和函数来描述数据之间的关系和计算逻辑;它允许我们以更高效、更有组织的方式管理和处理数据。
在函数式编程中,数据被组织成表格的形式,每列代表一个数据字段或变量,每行代表一个数据记录。可以通过公式和函数将不同的数据字段进行计算和操作,生成新的计算结果。
JVS-rules规则中函数可灵活应用,可自行扩展,对于数据收集也有很多作用:
(1)可以提高效率,将一些数据自动计算出来,减少需要填写的内容
如,分数在 90 以上时等级为 A,否则为 B。那么在输入分数之后,等级是 A 或 B 就能根据公式自动判断出来。
(2)可以减少错误
如,当前库存总数量=入库数量-已出库数量。那么在入库数量、已出库数量输入之后,当前库存总数量就能根据公式自动计算出来,避免手工计算出错。
基础变量的函数操作(部分)如下:
|-----------------|----------|----------------------------------------------------------------------------------|----------|-------------------------------------------------|
| 函数 | 函数分类 | 说明 | 说明 | 上手实例 |
| EQ | 逻辑函数 | 两个值比较,相等返回 true,默认忽略大小写,若不忽略,则填写第三个参数true | 2个,必填 | EQ(value1,value2) |
| NE | 逻辑函数 | 两个值比较,不相等返回 true,默认忽略大小写,若不忽略,则填写第三个参数true | 2个,必填 | NE(value1,value2) |
| LT | 逻辑函数 | value1小于value2返回 true | 2个,必填 | LT(value1,value2) |
| GT | 逻辑函数 | value1大于value2返回 true | 2个,必填 | GT(value1,value2) |
| LE | 逻辑函数 | value1小于等于value2返回 true | 2个,必填 | LE(value1,value2) |
| GE | 逻辑函数 | value1大于等于value2返回 true | 2个,必填 | GE(value1,value2) |
| AND | 逻辑函数 | 当参数组中的所有参数逻辑值为 true 时(逗号隔开的逻辑式子都满足),才返回 true,当参数组中的任何一个参数逻辑值为 false 时,就会返回false。 | 至少1个,必填 | AND(logical1, [logical2], ...) |
| OR | 逻辑函数 | 在参数组中,任何一个参数逻辑值为 true(逗号隔开的逻辑式子其中一项满足),即返回 true;只有当所有逻辑参数值为 false,才返回 false。 | 至少1个,必填 | OR(logical1,[logical2], ...) |
| NOT | 逻辑函数 | 对参数逻辑值求反。NOT 比较简单,就是把括号里为 true 的值变成 false,括号里为 false 的值变为 true。 | 1个,必填 | NOT(logical) |
| IF | 逻辑函数 | 判断一个条件能否满足;如果满足返回一个值,如果不满足则返回另外一个值 | 3个,必填 | IF(A,B,C) |
| ISEMPTY | 逻辑函数 | 判断一个字段是否为空;如果为空,则返回 true;如果不为空则返回 false | 1个,必填 | ISEMPTY(字段) |
| CONCATENATE | 文本函数 | 将多个字符串拼接合成一个文本字符串 | 至少1个,必填 | CONCATENATE(text1,[text2], ...) |
| LEFT | 文本函数 | 从一个文本字符串的第一个字符开始返回指定个数的字符,如果文本长度小于自定字符个数,就将原始文本返回 | 2个,必填 | LEFT(text,num_chars) |
| RIGHT | 文本函数 | 从一个文本字符串的最后一个字符开始返回指定个数的字符,如果文本长度小于自定字符个数,就将原始文本返回 | 2个,必填 | RIGHT(text,num_chars) |
| LEN | 文本函数 | 返回文本字符串中的字符个数 | 1个,必填 | LEN(text) |
| LOWER | 文本函数 | 将一个文本字符串中的所有大写字母转换为小写字母 | 1个,必填 | LOWER(text) |
| UPPER | 文本函数 | 将一个文本字符串中的所有小写字母转换为大写字母 | 1个,必填 | UPPER(text) |
| REPLACE | 文本函数 | 根据指定的字符数,将部分文本字符串替换为不同的文本字符串 | 1个,必填 | REPLACE(oldtext, startnum, numchars, newtext) |
| REPT | 文本函数 | 将文本重复指定次数 | 2个,必填 | REPT(text, number_times) |
| SEARCH | 文本函数 | 在第二个文本字符串中查找第一个文本字符串,并返回第一个文本字符串的起始位置的编号,该编号从第二个文本字符串的第一个字符算起。返回 0 则表示未查找到 | 3个,前2个必填 | SEARCH(findtext,withintext,[start_num]) |
| MID | 文本函数 | 截取文本的有效部分内容 | 3个,必填 | MID(text,start_index,end_index) |
| ISEMPTY | 文本函数 | 判断值是否为空字符串、空对象或者空数组 | 1个,必填 | ISEMPTY(text) |
| ADD | 数学函数 | 计算多个字段值总和 | 至少1个,必填 | ADD(number1, [number2], ...) |
| AVERAGE | 数学函数 | 求多个数值的平均值 | 至少1个,必填 | AVERAGE(number1, [number2], ...) |
| MAX | 数学函数 | 返回一组数字中的最大值 | 至少1个,必填 | MAX(Number1, [Number2], ...) |
| MIN | 数学函数 | 返回一组数字中的最小值 | 至少1个,必填 | MIN(Number1, [Number2], ...) |
| ABS | 数学函数 | 当数值为负数的时候返回他的绝对值数值 | 1个,必填 | ABS(Number) |
| ROUND | 数学函数 | 数值出现小数点的时候,将小位数指定到对应的位数 | 2个,必填 | ROUND(number, num_digits) |
| CEILING | 数学函数 | 返回将参数 number 向上舍入(沿绝对值增大的方向)为最接近的指定基数的倍数 | 2个,必填 | CEILING(number, significance) |
| FLOOR | 数学函数 | 将参数 number 向下舍入(沿绝对值减小的方向)为最接近的 significance 的倍数 | 2个,必填 | FLOOR(number, significance) |
| INTNUM | 数学函数 | 将数字向下舍入到最接近的整数 | 1个,必填 | INTNUM(number) |
| LOG | 数学函数 | 根据指定底数返回数字的对数 | 2个,必填 | LOG(number, base) |
| MOD | 数学函数 | 返回 2 个数值组件相除的余数 | 2个,必填 | MOD(number, divisor) |
| POWER | 数学函数 | 计算出数值组件乘幂的值 | 2个,必填 | POWER(number, power) |
| FIXED | 数学函数 | 将数字舍入到指定的小数位数,以十进制数格式对该数进行格式设置,并以数字形式返回结果 | 2个,必填 | FIXED(number, decimals) |
| SQRT | 数学函数 | 取数值组件值正的平方根 | 1个,必填 | SQRT(number) |
| SUM | 数学函数 | 函数使所有以参数形式给出的数字相加并返回和 | 至少1个,必填 | SUM(number1, [number2], ...) |
| PRODUCT | 数学函数 | 数字相乘 | 2个,必填 | PRODUCT(number1,number2) |
| SUMPRODUCT | 数学函数 | 在给定的数组中,将数组间对应的元素相乘,并返回乘积之和 | 2个,必填 | SUMPRODUCT(array1, array2) |
| NUMBERCOMPARE | 数学函数 | 数值组件与数值组件2比较,大于返回1,等于返回0,小于返回-1 | 2个,必填 | NUMBERCOMPARE(数值组件1,数值组件2) |
| NOW | 时间函数 | 自此日期起的1970年1月1日,00:00:00 GMT以来的毫秒数。 | 不可填 | NOW() |
| INTERSECTIONSET | 集合函数 | 计算两个集合的交集 | 2个,必填 | INTERSECTIONSET(array1,array2) |
| UNIONSET | 集合函数 | 计算两个集合的并集 | 2个,必填 | UNIONSET(array1,array2) |
| DIFFERENCESET | 集合函数 | 计算两个集合的差集 | 2个,必填 | DIFFERENCESET(array1,array2) |
| SUBSET | 集合函数 | 计算第二个集合是否第一个集合的子集 | 2个,必填 | SUBSET(array1,array2) |
| ARRAYGET | 集合函数 | 返回数据集中第k个值 | 2个,必填 | ARRAYGET(Array, k) |
| LARGE | 集合函数 | 返回数据集中第k个最大值 | 2个,必填 | LARGE(Array, k) |
| SMALL | 集合函数 | 返回数据集中第k个最小值 | 2个,必填 | SMALL(Array,k) |
| USER | 人员类 | 无参数模式:User() 获取当前登录人; | 1个,选填 | USER() |
| USER | 人员类 | 有参数模式:User(level) 当前登录人的主管, level 是 获取当前登录人的主管 | 1个,选填 | USER([level]) |
| USERFIELD | 人员类 | 人员搜索框需要联动带出一些基本信息 | 2个,必填 | USERFIELD( 成员 ,"userId"),USERFIELD( 成员 ,"name") |
| GETUSERNAME | 人员类 | 获取当前登录人昵称 | 不可填 | GETUSERNAME() |
| EMPLOYEE | 人员类 | 返回对应的人员信息对象数组(即人员组件底层的值) | 1个,必填 | EMPLOYEE(array1) |
| DIRECTOR | 人员类 | 获取当前登陆人的主管名称 | 1个,必填 | DIRECTOR(level) |
| LOGINUSER | 人员类 | 登录人 | 不可填 | LOGINUSER() |
| LOGINUSERWORKNO | 人员类 | 获取当前登录人员工唯一ID(员工UserID) | 不可填 | LOGINUSERWORKNO() |
| DEPTNAME | 部门类 | 获取指定人所在部门名称 | 1个,必填 | DEPTNAME(userId) |
| COUNT | 通用类 | 统计指定表单提交的数据总数 | 至少1个,必填 | COUNT("表单ID") |
在函数操作中,基础变量起着至关重要的作用。通过了解基础变量与函数操作之间的关系,我们可以更好地掌握函数的使用,提高代码的质量和可维护性。
规则引擎在线demo:http://rules.bctools.cn
gitee地址:https://gitee.com/software-minister/jvs-rules