簡單了解JRuby語言技術(shù)
JRuby語言技術(shù)的人氣正在如日劇增。那么我們應(yīng)該如何正確的看待JRuby語言技術(shù)呢?在這里我們就為大家簡單的描述一下這項技術(shù)原理。#t#
但問題是,為什么你要這么做呢?原因有很多,其中包括:可以簡化重復(fù)性任務(wù),可以封裝樣板式代碼(Boiler-plate Code),或者是可以更有效表達(dá)代碼目的的API.不管你有什么特殊原因,所有的DSL都可以為你的項目帶來清晰的價值。
在演講中探討的方法是創(chuàng)建一個JRuby的DSL,可以在Java類內(nèi)部使用。因為由JRuby生成的字節(jié)碼最終會在JRE上運行,所以這個DSL應(yīng)該被視為“內(nèi)部”DSL——使用一個通用編程語言來創(chuàng)建一個特定編程語言。另外一種可選方式是“外部”DSL,需要一個外部的編譯器和生成器,這樣則會使得整合工作難度增大。
這個方法的優(yōu)點在于創(chuàng)建DSL,其中展示了一些JRuby語言技術(shù)使得DSL的開發(fā)變得更加容易:
運算符重載——對運算符進(jìn)行重載可以使DSL可以提供一個更為自然的語法
Hash和符號(Symbol)——使用Hash和符號可使表達(dá)關(guān)系和標(biāo)識對象更加容易
Block——Block可以封裝可運行邏輯,并允許邏輯儲存起來(置于Hash中),用于稍后執(zhí)行
動態(tài)類型擴(kuò)展——可以用動態(tài)的方式向類和對象加入方法
方法缺失(Method Missing)——當(dāng)調(diào)用了一個不存在的方法時,可以進(jìn)行自陷(Trap),這樣可以避免需要提前了解
所有操作整合——可以使用已有Java代碼為了全面獲得使用JRuby語言技術(shù)創(chuàng)建DSL的好處,演講中還給出了關(guān)于編程方式的技巧:確保你不會使用動態(tài)語言來編寫Java代碼從通用構(gòu)建Block(Common Building Blocks)創(chuàng)建DSL識別問題,然后創(chuàng)建出一個合適的語法表達(dá)出解決方案
提供元數(shù)據(jù)和行為——不要讓你的DSL變成配置文件用Ruby的方式思考:使用類型擴(kuò)展;使用Block;在對象上使用方法保證有限的作用域;僅僅解決領(lǐng)域中相應(yīng)的小部分問題,不要讓DSL變成一個通用編程語言對于開發(fā)人員來說,DSL是另外一種可以利用的工具。只要花一小部分時間,就可以節(jié)省更大部分的時間。