Groovy语言最引以为豪的特点就是DSL了,关于DSL的定义以及分类、优点等,就不是本篇所要阐述的了,大家可以上网查,网上有大量的这方便的介绍。Groovy语言是非常便于设计内部DSL了,在这方面,我的Groovy探索系列已经有了很多专题谈到过使用Groovy语言创建内部DSL的一些方面。本篇所要探索的是一个关于Groovy语言DSL的一个非常小的方面、也是非常不起眼的方面:关于方法名的DSL。
说到方法名的DSL,其实我们在Groovy语言中已经有了非常广泛的应用。比如,我们在一开始学习Groovy语言,就会写一个“HelloWorld”的程序来开始我们的第一个Groovy语言程序,它的代码大致如下:
public class HelloWorld{
/**
* @param args
*/
public static void main(def args){
// TODO Auto-generated method stub
println 'Hello,World!'
}
}
它的运行结果就不要我多说了。我们感兴趣的是“println”方法,我们都知道,在Java语言中,该对应的方法是“System.out.println”。将长的方法名——“System.out.println”写成了“println”,就是Groovy语言中关于方法的DSL的一个应用。这样的好处主要是两个方面:第一是编码的快捷性增加,输入“println”当然也输入“System.out.println”方便了很多;第二就是可读性的增强,这是DSL的追求,“println”的可读性也比“System.out.println”强。
那么,我们在实际的编码过程中,又该如何实现形如“println”这样的DSL呢?
关于方法名的DSL,在Groovy语言中,有三种实现方法,先说其中的两种,它们分别是静态引入和使用“as”关键字。我们还是以一个例子来说明。
比如,我们想取得系统的当前时间,Java语言的方式是如下的:
System.out.println(System.currentTimeMillis())
有了静态引入,我们在Groovy语言中的编码将是这样的:
import static System.currentTimeMillis
/**
* @author Administrator
*
*/
public class Testor2{
/**
* @param args
*/
public static void main(def args){
// TODO Auto-generated method stub
println currentTimeMillis()
}
}
当然,我们还可以更进一步,使用“as”关键字的代码则会是这样的:
import static System.currentTimeMillis as now
/**
* @author Administrator
*
*/
public class Testor2{
/**
* @param args
*/
public static void main(def args){
// TODO Auto-generated method stub
println now()
}
}