groovy:candy for java developers

30
Groovy: Candy for Java Developers by @foxgem

Upload: foxgem

Post on 15-Jan-2015

518 views

Category:

Technology


5 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Groovy:Candy for Java Developers

Groovy: Candy for Java Developers

by @foxgem

Page 2: Groovy:Candy for Java Developers

Why Groovy ? 看几个例子先!

Page 3: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• File I/O– 获取文件内容

new File("d:/grails_opts.txt").text

Page 4: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• File I/O– 给文件加行号

def i = 1new File("d:/grails_opts.txt").eachLine{ println "${i++}: $it"}

Page 5: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• File I/O– 遍历下一级子目录

new File("d:/").eachDir { println it }

Page 6: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• File I/O– 递归遍历子目录所有中文件

new File("d:/").eachFileRecurse { println it.name}

Page 7: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 集合操作– 列表每个值乘 2 并打印

[1,2,3].each{ println it*2 }

Page 8: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 集合操作– 返回新集合,其中每个元素是旧集合对应位置

元素值的 3 倍

[1,2,3].collect{ it*3 }

Page 9: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 集合操作– 求和

[1,2,3].sum()

Page 10: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 集合操作– 列表中是否含有偶数

[1,2,3].any{ it%2 == 0 }

Page 11: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• XML 解析

def xml = """ <languages> <language name="C++"> <author>Stroustrup</author> </language> <language name="Java"> <author>Gosling</author> </language></languages>"""

def languages = new XmlParser().parseText(xml)languages.each { println "${it.@name} authored by ${it.author[0].text()}"}

Page 12: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 正则表达式– 列出 D:\ 下所有 txt 文件

new File("d:/").eachFileMatch(~/.*txt/){ println it.name}

Page 13: Groovy:Candy for Java Developers

让人印象深刻的 Groovy 代码• 正则表达式– 返回 html 中 <title> 的值

def titleMatcher = content =~ /<title>(.*)<\/title>/return titleMatcher[0][1]

Page 14: Groovy:Candy for Java Developers

Why Goovy ?• 简洁,兼容 Java– 90% 以上的 Java 代码可以原封不动的在

groovy 环境下运行– 自动 import 常用的包:• java.lang 、 java.util 、 java.io 、 java.net• groovy.lang 、 groovy.util

Page 15: Groovy:Candy for Java Developers

Why Goovy ?• 更多简洁代码的示例– System.out.println => println– 可选的 return– GString: "${i++}: $it"– GroovyBean (左)让 JavaBean (右)更简

洁class MyBean{ int a}

class MyBean{ private int a public int getA(){ return a} public void setA(int a){this.a = a}}

Page 16: Groovy:Candy for Java Developers

Why Goovy ?• 更好用的集合– 优化定义:

• List : [1, 3, 4, 1, 8, 9, 2, 6]• Map : ['C++' : 'Stroustrup' , 'Java' : 'Gosling' ,

'Lisp' : 'McCarthy' ]

– [] 操作符,索引类型可以是:• 正、负、区间、键。

– 大量方便的方法:• each 、 reverseEach 、 eachWithIndex 、 collect

、 find 、 findAll 、 findIndexOf 、 sum 、 inject 、join 、 flatten 、 groupBy 、 any 、 every……

Page 17: Groovy:Candy for Java Developers

友情提示:以下特点对 Java 开发者或许陌生,不要怕,改善生活质量全靠它们了!

Page 18: Groovy:Candy for Java Developers

Why Goovy ?• 无处不在的闭包– 定义: def c= {…}– 特点:似函数而非函数,代码即数据

Page 19: Groovy:Candy for Java Developers

Why Goovy ?• 闭包的妙用:– 用 Map 构造临时对象

def m = [p:1, showP: {println m.p}]m.showP()

Page 20: Groovy:Candy for Java Developers

Why Goovy ?• 闭包的妙用:– 实现接口

// 只实现接口中的一个方法{……} as java.awt.event.MouseListenermethods = [ // 用 Map 实现多个方法 m1 : {......},//m1 和 m2 为对应实现的方法名 m2 : {......}]methods as java.awt.event.MouseListener

Page 21: Groovy:Candy for Java Developers

Why Goovy ?• Duck Typing :更高级的多态– 如果走路像鸭子,叫声像鸭子,那它就是鸭子

class Rectangle{ def draw(){ println "This is rectangle" }}class Square{ def draw(){ println "This is Square" }}def draw(painter){ painter.draw()}draw(new Rectangle())draw(new Square())

Page 22: Groovy:Candy for Java Developers

Why Goovy ?• GPars :并发编程其实也不是那么难 : )– 从 Groovy 1.8 起,作为扩展包随 Groovy 发

布。– 对多种并发编程模型提供了简洁的 DSL :• Actor 、 STM 、 Agent 、 CSP 、 Data Flow 等

final Actor actor = new DynamicDispatchActor({ when {String msg -> println 'A String'; reply 'Thanks'} when {Double msg -> println 'A Double'; reply 'Thanks'} when {msg -> println 'A something ...'; reply 'What was that?'}})actor.start()

Page 23: Groovy:Candy for Java Developers

Why Goovy ?• Grails : JVM 下的杀手级应用

摘自

《 T

he D

efin

itiv

e G

uid

e t

o G

rails

Page 24: Groovy:Candy for Java Developers

Why Goovy ?• 丰富多彩的生态系统

• glu :部署和监控自动化平台( LinkedIn 开源)• asgard :管理基于云的应用和基础设施的 Web 工具( Netflix 开源)• ……

Page 25: Groovy:Candy for Java Developers

还有……• 必需掌握的 Groovy 高级特性–MOP– AST Transformation– Builder

Page 26: Groovy:Candy for Java Developers

他们也在用 Groovy

• 更确切的说是在用 Grails– Reuters (路透社)– LinkedIn– Sky.com– NTT– Netflix–Wired.com– 更多的案例:• http://www.grails.org/Success+Stories

Page 27: Groovy:Candy for Java Developers

Groovy 2.0 的新变化• 更高的性能– 支持 JDK 7 的 Invoke Dynamic–@CompileStatic

• 对于 Java 更友好–@TypeChecked

• 模块性更强

详见: http://www.infoq.com/articles/new-groovy-20

Page 28: Groovy:Candy for Java Developers

参考书目

Page 29: Groovy:Candy for Java Developers

参考站点• Grails 官方站点: http://grails.org• Groovy

Blogs : http://groovyblogs.org• GroovyQ : http://www.groovyq.net

Page 30: Groovy:Candy for Java Developers

最后:一则发人深省的漫画……

摘自

:G

eek

And P

oke