读书-Groovy in action

Groovy和java是什么关系呢?人们都说Groovy和java很像,究竟哪里很像?人们都说Groovy相对于java更加的简洁,语言表达力更强,又何以见得呢?java

 

首先我想从如下三个方面来阐释我所理解的Groovy相对于java更强的语言表现力。从易到难排序:闭包

第一:GStringspa

java中的string以及Groovy中的普通String都是java.lang.String的实例;而GString则是groovy.lang.GString的实例。code

从外形来看,Groovy中的普通字符串用单引号括起;而GString则使用双引号。orm

那么为何要引入GString呢,他又能带来普通字符串所不具备的那些特性呢?对象

GString中容许存在占位符而且能够在运行时对其进行替换。blog

好比:排序

def name = 'Garfield'字符串

def sampleGString = "My name is $name"get

那么引入这种GString有什么具体的好处呢?

1)打印消息的时候不用再使用String.format了;

2)Groovy中的方法名能够用String命名,使用String命名方法一方面加强了方法的可读性,另外一方面GString使得方法的动态调用成为可能。

╮(╯▽╰)╭,知道本身没能解释清楚,给个例子:

void setField(String type, String value) {
    "add $type"(value)
} 

def 'add name'(String value) {
  //some code
}

def 'add hobby'(String value) {
  //some code
}

若是用java就要写成这样了:

void setField(String type, String value) {
  if(type == 'name') {
     addName(value)
  } else if (type == 'hobby') {
     addHobby(value)
  }
}

第2、Closure(闭包)

闭包对于java来说是新的概念,但其自己确实不是一个新概念了。

在面向对象的世界里,Closure也能够看作一个对象,只是普通的对象有属性,有行为;而closure就是只有行为没有属性的对象了。

简单来讲,closure就是一个用花括号括起来的代码块。

但因为上面讲的,咱们彻底能够讲closure当作一个对象。

能够声明,定义一个closure,也能够把closure当作参数传递给方法使用。

def sampleClosure = { println"hello!"} 
sampleClosure()

在一个closure的内部,包括参数与语句两部分,一般长这样:

{parameter list-> some statements}

若是closure只有一个参数,则能够参数隐式的参数it

Closure envelope = { person -> new Letter(person).send() }
addressBook.each (envelope)

那么相对于java,Groovy提供的closure有什么好处呢?

那就是咱们能够没必要再使用匿名内部类了!

java中,若是想传递一个代码块给某个方法,则必须定义一个类,使其提供执行该动做的方法,而且将这个类的实例传递给那个方法。这样作的缺点:一方面是没必要要的增长了定义类的个数;另外一方面是读起来很差懂。

第3、比较小的一个点是Groovy对于属性的处理

首先Groovy会自动并且隐式的为类中定义的field生成setter和getter方法,而且提供了调用该setter、getter方法的快捷方式。

好比:

class Class {

  def field;

}

在其余类中,Class object = new Class(); object.field = someValue; def var = object.field;

能够看到在Class中定义了一个field,由此没必要本身定义getter和setter方法;

在其余类中使用上述类的实例时,看起来能够直接访问该field,但其实是调用了getter setter 的快捷方式。

相关文章
相关标签/搜索