目前,随着软件产业的蓬勃发展,软件项目及产品取得新进步、新成绩的同时,也遇到新的问题及挑战。
从业务角度来说,开发维护需要编写的业务代码日益庞大复杂,程序员需要编写的代码越来越多、越来越长;项目及产品需要集成的第三方语言的情况也日益常见,集成的工作及难度非常大。
从底层存储来说,不同数据库细节差异大,迁移维护不容易;SQL语法标准难以实现传统编程语言的特性;业务逻辑集中数据库,导致后期难以扩展。
从语言角度来说,Java等编程语言虽然功能强大,但是缺少关系运算支持,对过滤、分组、排序和关联等实现难度大;Python等虽然计算优异,但是语法结构和Java差异很大,Java程序员上手不易;一般脚本语言语法虽然简单方便,但是往往限于特定场景,对多元化场景支持不够充分,扩展能力弱。
JavaPlusScript以Java语言为基石,兼有脚本语言的灵活方便,设计初衷就是为Java程序员服务,给他们减负,提高工作效率。
JavaPlusScript本身是对Java语言的增强,因此可以使用Java语言的场合,都是可以使用JavaPlusScript语言。当然,JavaPlusScript本身还是有一些推荐场景,在这些业务场景,用户可以快速方便开发业务,下面这张图列举了这些场景:
EL表达式:
数据服务:
ETL编排:
JavaPlusScript语言优势在于灵活可扩展,用户可以根据自己的需要进行集成、扩展甚至二次开发,定制适合自身的业务场景,真正做到“看菜吃饭,量体裁衣”。
JavaPlusScript采用Maven管理工程,通过定义核心工程、扩展工程以及聚合工程,实现语言解析、语言特性与具体业务实现分离,既保证语言自身的稳定,又保证良好的扩展能力,工程层次图如下:
功能特性
JavaPlusScript语言在设计上遵循大部分Java语法规范,但是在简化程序员操作这一大前提下,还是做了很多改进,比如:变量弱类型,不用强制声明类型。
JavaPlusScript作为一门语言,当然支持各种语法、指令、函数,碍于篇幅,下面重点为大家介绍常用的功能特性:
脚本语言支持集合的差、并、交、异或运算;集合运算同时支持操作符和函数调用两种方式;支持集合的聚合运算;支持通过集合对象操作元素API方法,省略循环。
JavaPlusScript支持脚本类,类似Java的类,但是脚本类使用更方便。比如说,脚本类的构造函数,如果参数名和属性名相同,自动赋值;属性免写get/set方法,自动支持;与集合运算、过滤等操作无缝集成。
在Java语言中,字符串拼接无论采用加号连接,还是采用StringBuffer,都不是优雅的做法,在JavaPlusScript语言中,可以采用更优雅的做法,通过占位符实现字符串和表达式的连接。
Java语言是直到JDK8才开始支持Lambda。JavaPlusScript支持通过Lambda简化业务逻辑,减少冗余代码。Lambda有两种运用方式:一是带名称的Lambda,可以像函数一样使用;二是匿名Lambda,可以作为参数,实现自定义业务功能,如排序、分组等。
JavaPlusScript目前支持三种排列组合方式:排列、组合、全排列,通过与Lambda结合,用户可以在排列组合遍历过程中,实现自身的业务逻辑,如打印输出、计数等。
注册函数是脚本语言非常重要的扩展机制之一,通过注册函数,用户可以实现逻辑封装和业务增强。
脚本语言内置了近百种注册函数,按调用方式的不同可以分为绑定对象类型和无绑定类型两种函数。
脚本类型如果按场景分,可以划分三角函数、数学函数、聚合函数、日期函数、字符串函数、转换函数、数据库函数、序表函数、序列函数等,用户可以根据自己的需要进行选择。
序表是二维数据结构,非常适合描述表结构数据,如果使用数据库很难离开这个结构。
序表的来源可以是多种,如数据库、Excel、csv文本等,同时支持遍历和下标访问两种方式;JavaPlusScript非常重视序表,提供强大的功能,序表可以进行关联、排序、分组、过滤等各种操作。
JavaPlusScript与Spring Bean无缝集成,用户可以直接使用;通过Bean机制,用户可以减少重复配置,一次配置到处使用,如数据库数据源等。
所有的Java资源都可以被JavaPlusScript使用;同时,JavaPlusScript的结果也可以转化为一般Java对象,非常人性化。
在JavaPlusScript中,可以方便的集成各种DSL/脚本语言,采用最合适的语言来有针对性的解决具体的问题,以便发挥最大的语言效能。语言扩展可以充分利用框架资源,节约开发时间。
JavaPlusScript设计之初就考虑到扩展问题,提供如下扩展点,方便用户扩展:
支持扩展注册函数;支持扩展聚合函数;支持扩展语言包;支持操作符重载;支持集成第三方语言等。虽然扩展点很多,但JavaPlusScript扩展机制都一样:实现指定扩展接口,定义Bean配置文件,脚本引擎就会自动扫描、加载扩展点,这是不是非常方便呢?
作为一款脚本语言,良好的异常提示跟语言功能点一样重要,如果用户编写、执行脚本总是遇到一堆错误信息,然而这些信息并不能帮助他解决问题,那么用户体验就非常槽糕了。JavaPlusScript一直重视用户体验,通过异常提示,用户不仅能知道错误原因,错误块的位置,还能知道完整的错误调用信息,如果涉及注册函数还会提示函数内部细节,非常人性化。
示例1:青年歌手参加歌曲大奖赛,有n(n>2)个评委打分,试编程求选手的平均得分(去掉一个最高分和 一个最低分)。
代码如下:
示例2:01背包问题,有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你一个承重为10的背包,如何让背包里装入的物品具有最大的价值总和?
代码如下:
示例3:关联序表
代码如下:
示例4:ETL示例,从excel提取历史的上证指数,并转存到数据库。
代码如下:
示例5:优化投资组合,小王有一笔钱m,在t时间内,想做理财投资,有如下几只理财产品可供选择,请给出最佳投资组合方案。
代码如下:
综上所述,JavaPlusScript扩充Java语法、优化代码结构、简化程序逻辑,是一款非常优秀的脚本语言。实现与Java相同的业务逻辑,代码量仅需三分之一甚至五分之一,可以大幅提升程序员的工作效率,让程序员们有更多的时间与家人在一起,让公司有更多的利润空间。