tinyscript - 注重提升集合类处理操作的脚本语言


GPL
跨平台
Java

软件简介

许多的人使用Java来作为主要的编程语言,许多的时候感觉代码太过繁复,当然有Scala、Kotlin、Python等等语言号称可以解决此问题,但是毕竟生态圈的切换不是个小问题。同时语法结构和Java相去甚远也导致切换的成本毕竟高。

为此本人做了一下尝试,准备走一个中间路线,主题还是用Java语言,但是在需要的时候用TinyScript来解决一下问题,然后再回到Java主体执行,所以你完全可以把它当成一种EL语言来使用,当然解决复杂问题也比常规的EL语言更方便,毕竟TinyScript在集合运算能力方面有重点扩展的地方。

未来的方向,会重点放在算法方面,目前已经内嵌了动态规划的背包问题通用方法,后面会逐步扩充其他算法,让程序员们不再纠结于算法实现,而是集中注意力在问题上。

语言特性列表

  • 支持有序数据结构:数组和序列

  • 支持无序数据结构:set和map

  • 支持专有数据结构:树和序表

  • 序表支持关联、匹配、过滤、分组、排序、聚会等多种业务运算

  • 与java无缝集成,适用于jdk1.6及以上版本

  • 支持new java对象,并可以使用Java所有类及对象

  • 可以采用obj.field方式访问和操作对象属性,简化obj.getField()和obj.setField(value);

  • 支持数据结构间相互转换

  • 支持调用java非静态方法和静态方法

  • 支持bean对象,可以操作bean对象的属性和方法

  • 可以和Spring集成,方便加载bean配置信息

  • 支持访问数据库,可以将表数据转换成序表结构

  • 支持访问Excel,可以将Sheet数据转换成序表结构

  • 支持访问文本,可以将行数据转换成序表结构

  • 支持不同数据源的序表操作,比如关联、匹配等

  • 支持object[key]扩展,比如访问list[1],map[key],简化用户操作

  • 支持object.field扩展,允许用户实现不同语法场景

  • 支持object.function(…)扩展,允许用户实现不同语法场景

  • 支持java的基本类型,内置不同精度的数值转换函数

  • 支持if/elseif/else、switch指令

  • 支持for、while循环指令

  • 支持基本表达式操作,符合java语法规范

  • 允许用户设置下标是否从0开始,方便用户访问元素

  • 支持[a .. b]方式生成指定范围的序列

  • 允许用户定制常量,可以在脚本引擎构造后直接使用,无需声明,如PI、E等。

  • 内置聚合函数和三角函数等系统函数,允许用户自行编写函数类进行扩展。

  • 允许用户编写脚本类,简化业务逻辑。

  • 允许用户编写脚本文件,同时支持java方式和IDE插件调用,实现即时开发测试。

  • 支持动态更新脚本文件,无需重新编译部署

  • 允许用户通过快速运行器执行脚本,也允许用户通过带Spring的运行器执行需要Spring环境的脚本

  • 定义了基本操作符,但是允许用户配置不同的对象实现重载。

  • 提供集合的差并交异或运算

  • 允许对集合子元素进行批量操作符运算,返回新的集合,如list*2

  • 允许对集合子元素进行批量方法运算,返回新的集合,如list.getName()

  • 允许对集合子元素进行批量属性运算,返回新的集合,如list.age

  • 支持lambda表达式,部分函数允许使用lambda表达式简化逻辑

  • 增强lambda特性,允许lambda变量修改外部同名变量。

  • 支持排列的lambda遍历操作

  • 支持组合的lambda遍历操作

  • 支持全排列的lambda遍历操作

  • 支持单方法接口的lambda封装,如Runnable、Comparator

  • 支持各种脚本内嵌执行,比如dataSource[[ sql语言 ]] 进行带@占位符的sql动态执行,支持template[[ 模板语言 ]] 进行模板语言执行,也可以继承各种其他脚本

当然上面列的不一定全,后面也会有新的语言特性加入。

脚本运行

脚本语言的扩展名是ts和tinyscript,当然也可以起其他的扩展名。

提供了Eclipse和Idea的执行器插件,安装之后可以右键直接运行脚本文件。

先推出看看反响如何,如果反响比较好,准备开发ide,支持高亮、调试等等。