3.8动作流的表达式语法
3.8.1基本运算符
+,-,*,/,%,!,~,==,!=,>,>=,<,<=,>>>,>>,<<,^,&,|,&&,||
赋值运算符只有两个::=和+=。
注意,这里是“:=”这样可以避免在判断相等的地方错误的写成赋值。
三目运算符:1 > 2 ?"a" : "b"
删除操作:delete,如:
delete $map.name或 delete $list[2]
另外,//和/* … */为注释。
3.8.2基本对象
字符
'a','\''
字符串
"abc","a\n\"b\""
整型
123,-1,0xff
长整型
1L,0x100L
浮点型
0.1,3.14d,1.1e3
列表(list)
{1, 2, 3}
或list@{1, 2, 3}
集合(set)
set@{1, 2, 3}
映射(map)
map@{a:1, b:2, c:3}
3.8.3变量
变量是以“$”起始的名称,如$name,$sex。
对变量的属性可以有以下几种访问方式,“.”和“[…]”,如:
$map.name,$map[$key],$map.list[$num],$list[0]。
注意,以两个“$”起始的为全局变量,如:$$flag。在一次请求中里的所有流程中都有效,请谨慎使用。
其他可引用的变量:
param,当前请求的参数集合,如:param.loginName。
attr,当前请求对象中的属性集合。
header,当前请求对象中的头信息集合。
cookie,当前请求对象中的cookie信息集合。
custom,平台中的预定义信息,如:
custom.currentDate,当前日期
custom.currentUserId,当前登录用户编号
3.8.4基本操作
link,将多个参数连成一个字符串
link('a', 1, 2, 3) =>"a123"
sub,取子对象
sub("12345", 3) =>"45"
sub({"a", "b", "c"}, 0, 2) => {"a", "b"}
split,分割字符串
split("a,b,c") => {"a", "b", "c"}
split("a.b.c", ".") => {"a", "b", "c"}
indexOf,在字符串或列表中查找指定字符或对象的索引值
indexOf("a,b,c", ',') => 1
indexOf("a,b,c", ',', true) => 3
indexOf("a,b,c", ',', 2) => 3
indexOf("a,b,c", ',', 2 true) => 1
indexOf({"a", "b", "c", "b"}, "b") => 1
indexOf({"a", "b", "c", "b"}, "b", true) => 3
charAt,获取指定位置的字符
charAt("abc", 1) =>'b'
length,获取字符串或集合的长度
length("abc") => 3
length({1, 2}) => 2
length(map@{}) => 0
isEmpty,判断对象是否为空
isEmpty(null) => true
isEmpty("") => true
isEmpty("") => false
isEmpty(map@{}) => true
contains,集合中是否包含指定的对象
contains(set@{"a", "b", "c"}, "b") => true
contains(set@{"a", "b", "c"}, "d") => false
contains(map@{a:1, b:2}, "b") => true
throw,抛出一个异常
throw($ex) =>抛出变量“$ex”中的异常
throw("a") =>抛出一个信息为“a”的异常
throw("a", "java.lang.IllegalArgumentException")
=>抛出一个信息为“a”的IllegalArgumentException异常
format,对数字或日期进行格式化
format(1000, "#,##0.00") => 1,000.00
format($date, "yyyy") => 2015
toIterator,将一个列表转换成迭代器
toIterator({1, 2}) => Iterator
toIterator(map@{a:1, b:2}) => map enrty Iterator
toIterator(map@{a:1, b:2}, true) => map key Iterator
toInt,转整型
toLong,转长整型
toDouble,转浮点型
toString,转字符串
toList,转列表
toList(数组) => List
toList(map@{a:1, b:2}) => map value List
toSet,转集合
toSet (数组) => Set
toSet(map@{a:1, b:2}) => map key Set
toDate,转日期
toDate("2015-11-24") =>日期
toDate("20151124", "yyyyMMdd") =>日期
toDate("20151124183000", "yyyyMMddHHmmss") =>日期时间
toDatetime,转日期时间
toDatetime("2015-11-24 18:30:00") =>日期时间
isBoolean,是否为布尔型
isNumber,是否为数字,整型、浮点型等
isString,是否为字符串
isDate,是否为日期或日期时间
isMap,是否为映射对象(map)
isList,是否为列表对象(list)
isSet,是否为集合对象(set)
isArray,是否为数组
hasNext,迭代器(Iterator)对象中是否有下一个
next,获取迭代器(Iterator)对象中的下一个值
first,获取列表、集合、数组等对象中的第一个值
first({1,2}) => 1
first("123") =>"123"
entryKey,获取Map.Entry中的key
entryValue,获取Map.Entry中的value
merge,将第二个对象中的数据合并到第一个对象中
merge({1, 2}, {3, 4, 5}) => {1, 2, 3, 4, 5}
merge({1, 2}, 3, 4, 5) => {1, 2, 3, 4, 5}
merge(map@{a:1}, map@{b:2}) => map@{a:1, b:2}
merge(map@{a:1}, "b", 2) => map@{a:1, b:2}
3.8.5特殊操作
特殊操作是基于基本操作的扩展,主要扩展了两个功能。
1.调用流程干预类中的公共方法
invoke_[方法名](参数…)
如:invoke_doService($a, {1, 2, 3})
2.获取干预类中的公共静态变量
static("[变量名]")
如:static("MAX_VALUE")
3.调用spring对象中的方法
spring$[beanId]$ [方法名](参数…)
如:spring$myService$doSomeThing("id", -1)
注:使用的spring对象必须是单例模式的
3.8.6优化建议
为了提高表达式的运行效率,对于引用路径较长的变量,如果需要多次使用,请定义成变量再使用。如:
$tmp.names[1].activeTime + $waitTime > $tmp.names[1].deadTime
应改为:
$tmpObj := $tmp.names[1]
$tmpObj.activeTime + $waitTime > $tmpObj.deadTime
对于常量运算,请放在前面。如:
$i := $tmp * 60 * 60 * 1000
应改为:
$i := 60 * 60 * 1000 * $tmp
或
$i := $tmp * (60 * 60 * 1000)
对于常量对象,即定义后只是读取,而不会再修改的对象,可以加上const标记为常量。如:
$dic := const {map@ student:1,teacher:2,staff:3}