读书-Groovy in action

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

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

第一:GString

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

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

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

GString中允许存在占位符并且可以在运行时对其进行替换。

比如:

def name = ‘Garfield‘

def sampleGString = "My name is $name"

那么引入这种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)
}
}

第二、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中,如果想传递一个代码块给某个方法,则必须定义一个类,使其提供执行该动作的方法,并且将这个类的实例传递给那个方法。这样做的缺点:一方面是不必要的增加了定义类的个数;另一方面是读起来不好懂。

第三、比较小的一个点是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 的快捷方式。

读书-Groovy in action

时间: 2024-10-25 16:52:17

读书-Groovy in action的相关文章

Eclipse groovy in action

Eclipse :Version: Juno Service Release 2GrEclipse plugins:http://dist.springsource.org/release/GRECLIPSE/e4.2/ 本次安装了两个: 其它的按提示操作即可 安装好后创建一个Groovy Project 其他的操作和创建java project一致,不再赘述 贴个测试的代码: package secondgroovypackage class RegexTest { static main(a

Groovy轻松入门——通过与Java的比较,迅速掌握Groovy

Groovy和Java的相同点有: 3+, 4+, 6+, 8+, 10+, 12+, 13, 14, 15, 18+, 20+, 21, 22, 23, 28+, 29+, 30+, 31+, 32+ +表示Groovy不但涵盖了Java的语法,而且还有增强部分. Groovy和Java的不同点有: 0, 1, 2, 5, 7, 9, 11, 16, 17, 19, 24, 25, 26, 27 下面所列序号不分先后顺序: 0. 在Groovy可以用def定义无类型的变量(定义变量方面def与

少一些套路,多一些真诚 ——groovy消灭表现层套路

  初次认识groovy是在2009年,当时看了Manning出版的<Groovy in Action 1st Edition>,对groovy这个语言的交互性shell,以及灵活的语法留下了深刻的印象,但限制于自己对脚本语言的特性了解甚少,社区基础的薄弱,以及所谓java is best的年少轻狂,没有进行实际应用,只是作为一种兴趣的萌芽种在了知识的土壤里.   转眼间到了2016年9月,突然在Manning网站上发现一本似曾相似的书籍-<Groovy in Action 2nd Ed

Groovy学习摘要

首先感谢翻译<Groovy in Action>Part 1的吴翊,其次感谢<Groovy入门经典>作者.翻译者.以及上传pdf版的分享者,最后感谢Groovy之父James Strachan 本文基于Groovy 1.8. ======== 分割线 开始于2014-12-1 ======== 1,Groovy开始运行 Groovy定义和特性: 是一个基于Java虚拟机的敏捷动态语言. 构建在强大的Java语言之上 并添加了从Python,Ruby和Smalltalk等语言中学到的

Groovy重载操作符

重载一时爽,一直重载一直爽. 最近在读<Groovy in action>一本书重新复习了Groovy的一些语法特性,迷恋上这个重载操作符的功能,坚持爽的不要要的.分享一个Demo. 由于Groovy语法跟Java差别略大但又基本完全兼容Java语法,这个Demo依然以Java语法写出来,方便大家理解. package com.FunTester.demo import com.fun.frame.SourceCode class demo1 extends SourceCode { publ

构建工具的发展及Android Gradle快速上手

前话: 最近谷歌宣布官方不再维护Eclipse ADT了,之后将更加专注于Android Studio的功能和性能上的改进,早在2013年的Google IO大会上首次推出了Android Studio,当时刚出来的时候我就好奇的去下载体验了一下,想看一下新开发工具的优势在哪里,据官方介绍,最吸引我的一点就是使用Studio使用了Gradle编译系统,可以支持很灵活的定制需求,而我当时正在研究当成库使用的APK(就是现在的aar文件,不过当时还没有出身),刚好遇到了ADT编译系统的限制,所以当时

书单收集

1. 前端技术是2015年增长比较快的领域之一,由于前端标准的兴起落后于已经成熟多年的服务端开发,所以信息量相对较多,如下是本人的书单. The Definitive Guide to HTML5CSS The Missing ManualProfessional JavaScript For Web DevelopersJavaScript The Definitiv eGuideEfffective JavaScriptJump Start bootstrapJQueryUI ThemesJ

Apache OFBiz源码解读之MVC模型

节点解析 request-map 你可以将其理解为controller的配置,如果你了解或使用过struts的配置或springmvc的annotation,就会发现这个定义跟它们是很相似的: [html] view plain copy print? <request-map uri="createCreditCardAndPostalAddress"> <security https="true" auth="true"/&

Gradle 1.12 翻译——第十七章. 从 Gradle 中调用 Ant

有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html 本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41204073 关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qin