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