tinyscript注重提升集合類處理操作的腳本語言
許多的人使用Java來作為主要的編程語言,許多的時候感覺代碼太過繁復,當然有Scala、Kotlin、Python等等語言號稱可以解決此問題,但是畢竟生態(tài)圈的切換不是個小問題。同時語法結構和Java相去甚遠也導致切換的成本畢竟高。
為此本人做了一下嘗試,準備走一個中間路線,主題還是用Java語言,但是在需要的時候用TinyScript來解決一下問題,然后再回到Java主體執(zhí)行,所以你完全可以把它當成一種EL語言來使用,當然解決復雜問題也比常規(guī)的EL語言更方便,畢竟TinyScript在集合運算能力方面有重點擴展的地方。
未來的方向,會重點放在算法方面,目前已經內嵌了動態(tài)規(guī)劃的背包問題通用方法,后面會逐步擴充其他算法,讓程序員們不再糾結于算法實現(xiàn),而是集中注意力在問題上。
語言特性列表
支持有序數(shù)據(jù)結構:數(shù)組和序列
支持無序數(shù)據(jù)結構:set和map
支持專有數(shù)據(jù)結構:樹和序表
序表支持關聯(lián)、匹配、過濾、分組、排序、聚會等多種業(yè)務運算
與java無縫集成,適用于jdk1.6及以上版本
支持new java對象,并可以使用Java所有類及對象
可以采用obj.field方式訪問和操作對象屬性,簡化obj.getField()和obj.setField(value);
支持數(shù)據(jù)結構間相互轉換
支持調用java非靜態(tài)方法和靜態(tài)方法
支持bean對象,可以操作bean對象的屬性和方法
可以和Spring集成,方便加載bean配置信息
支持訪問數(shù)據(jù)庫,可以將表數(shù)據(jù)轉換成序表結構
支持訪問Excel,可以將Sheet數(shù)據(jù)轉換成序表結構
支持訪問文本,可以將行數(shù)據(jù)轉換成序表結構
支持不同數(shù)據(jù)源的序表操作,比如關聯(lián)、匹配等
支持object[key]擴展,比如訪問list[1],map[key],簡化用戶操作
支持object.field擴展,允許用戶實現(xiàn)不同語法場景
支持object.function(…)擴展,允許用戶實現(xiàn)不同語法場景
支持java的基本類型,內置不同精度的數(shù)值轉換函數(shù)
支持if/elseif/else、switch指令
支持for、while循環(huán)指令
支持基本表達式操作,符合java語法規(guī)范
允許用戶設置下標是否從0開始,方便用戶訪問元素
支持[a .. b]方式生成指定范圍的序列
允許用戶定制常量,可以在腳本引擎構造后直接使用,無需聲明,如PI、E等。
內置聚合函數(shù)和三角函數(shù)等系統(tǒng)函數(shù),允許用戶自行編寫函數(shù)類進行擴展。
允許用戶編寫腳本類,簡化業(yè)務邏輯。
允許用戶編寫腳本文件,同時支持java方式和IDE插件調用,實現(xiàn)即時開發(fā)測試。
支持動態(tài)更新腳本文件,無需重新編譯部署
允許用戶通過快速運行器執(zhí)行腳本,也允許用戶通過帶Spring的運行器執(zhí)行需要Spring環(huán)境的腳本
定義了基本操作符,但是允許用戶配置不同的對象實現(xiàn)重載。
提供集合的差并交異或運算
允許對集合子元素進行批量操作符運算,返回新的集合,如list*2
允許對集合子元素進行批量方法運算,返回新的集合,如list.getName()
允許對集合子元素進行批量屬性運算,返回新的集合,如list.age
支持lambda表達式,部分函數(shù)允許使用lambda表達式簡化邏輯
增強lambda特性,允許lambda變量修改外部同名變量。
支持排列的lambda遍歷操作
支持組合的lambda遍歷操作
支持全排列的lambda遍歷操作
支持單方法接口的lambda封裝,如Runnable、Comparator
支持各種腳本內嵌執(zhí)行,比如dataSource[[ sql語言 ]] 進行帶@占位符的sql動態(tài)執(zhí)行,支持template[[ 模板語言 ]] 進行模板語言執(zhí)行,也可以繼承各種其他腳本
當然上面列的不一定全,后面也會有新的語言特性加入。
腳本運行
腳本語言的擴展名是ts和tinyscript,當然也可以起其他的擴展名。
提供了Eclipse和Idea的執(zhí)行器插件,安裝之后可以右鍵直接運行腳本文件。
先推出看看反響如何,如果反響比較好,準備開發(fā)ide,支持高亮、調試等等。
