此页面所有软件内容、截图、价格、介绍等均来源于互联网,地址均为第三方提供,请谨慎下载。



magic-script

介绍

magic-script是一款基于JVM的脚本语言,目前主要是为magic-api项目设计。

应用案例

  • magic-api,接口快速开发框架,通过Web页面配置,自动映射为HTTP接口
  • spider-flow,新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫

脚本语法

关键字

运算符

类型

一元运算符

您可以通过一元运算-符将数字取反,例如-234。要取反布尔表达式,可以使用!运算符,例如!true。 自增/自减 i ii----i

算术运算符

支持常见的算术运算符,例如1 2 * 3 / 4 % 2、同样也支持 =-=*=/=%=

比较运算符

23 < 3423 <= 3423 > 3423 >= 34true != false23 == 34

比较运算符结果为boolean类型

逻辑运算符

除了一元运算!符,您还可以使用&&||。就像Java中一样,运算符也是一种短路运算符。如果&&左边计算为false,则不会计算右边。如果||左侧为true,则不会计算右边 在1.3.0 版本中增强了&& || 不在强制两边必须是布尔类型。作用与JS一样

三元运算符

三元运算符是if语句的简写形式,其工作方式类似于Java中,例如true ? "yes" : "no" 在1.2.7 版本中,增强了if 和三元运算符,不在强制值必须是布尔类型,可以写if(xxx)的形式当xxx为以下情况时为fasle、其它情况为true

  • null
  • 空集合
  • 空Map
  • 空数组
  • 数值==0
  • 非空字符串
  • false

类型转换

可使用::type(defaultValue) 的方式进行类型转换,如

var a = "123"::int; // 123
var b = "abc"::int(111); // 111
var c = "2020-01-01"::date('yyyy-MM-dd'); // 转换为date

可选链操作符

可选链操作符(?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?.操作符的功能类似于.链式操作符,不同之处在于,在引用为空 的情况下不会引起错误,该表达式短路返回值是 null

当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。

obj?.prop
obj?.method(args)

示例:

var a = null;
var b = a?.name;    // b = null;
var c = a?.getName();   // c = null;

扩展运算符

扩展运算符,又叫展开语法(Spread syntax), 是用于将list或map在语法层面展开;

语法:

lambda 调用

var sum = (a,b,c) => a   b   c;
System.out.println(sum(...[1,2,3]))
/*
结果:6
*/

list 展开

var arr = [3,4,5];
System.out.println([1,2,...arr,6,7])
/*
结果:[1, 2, 3, 4, 5, 6, 7]
*/

list 展开到 map 中

var arr = [3,4,5];
System.out.println({key1:1,...arr})
/*
结果:{key1=1, 0=3, 1=4, 2=5}

虽然这些key看起来像数值,但其实是String类型的key,如果把它们转为JSON看起来是这样的:

{"key1":1, "0":3, "1":4, "2":5}

*/

map 展开

var map = {key2:2}
System.out.println({key1:1,...map,key3:3})
/*
结果:{key1=1, key2=2, key3=3}
*/

for循环

当前for循环只支持两种,循环集合或Map

循环集合

import 'java.lang.System' as System;
var list = [1,2,3];
for(index,item in list){    //如果不需要index,也可以写成for(item in list)
    System.out.println(index   ":"   item);
}
/*
结果:
0:1
1:2
2:3
*/

循环指定次数

var sum = 0;
for(value in range(0,100)){    //包括0包括100
    sum = sum   value; //不支持 = -= *= /=    -- 这种运算
}
return sum;
/*
结果:5050
*/

循环map

import 'java.lang.System' as System;
var map = {
    key1 : 123,
    key2 : 456
};
for(key,value in map){    //如果不需要key,也可以写成for(value in map)
    System.out.println(key   ":"   value);
}
/*
结果:
key1:123
key2:456
*/

Import导入

导入Java类

import 'java.lang.System' as system;//导入静态类并赋值给system作为变量
import 'javax.sql.DataSource' as ds;//从spring中获取DataSource并将值赋值给ds作为变量
import 'org.apache.commons.lang3.StringUtils' as string;//导入静态类并赋值给ds作为变量

System.out.println('调用System打印');//调用静态方法
System.out.println(ds);
System.out.println(string.isBlank('')); //调用静态方法

new创建对象

创建对象

import 'java.util.Date' as Date;//创建之前先导包,不支持.*的操作
return new Date();

导入已定义的模块

import log; //导入log模块,并定义一个与模块名相同的变量名
//import log as logger; //导入log模块,并赋值给变量 logger
log.info('Hello {}','Magic API!')

异步调用

异步调用方法

var val = async db.select('.....'); // 异步调用,返回Future类型
return val.get();   //调用Future的get方法

异步调用lambda

var list = [];
for(index in range(1,10)){
    list.add(async (index)=>db.selectInt('select #{index}'));
}
return list.map(item=>item.get());  // 循环获取结果

网友提问

LINQ的JOIN使用,如果关联的行数为0,则表示全没关联上,且没有join语句,在这种情况下,直接返回空集合数据。 怎么单独使用呀 没看到 相关说明 我想用这个脚本执行器来做属于我自己的编辑器可以吗?不太会用

温馨提示! 即将跳转到 第三方 网站下载具体内容

点赞(61) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部