狠狠撸

狠狠撸Share a Scribd company logo
Groovy: Candy for Java Developers

                   by @foxgem
Why Groovy? 看几个例子先!
让人印象深刻的Groovy代码
? File I/O
  – 获取文件内容

   new File("d:/grails_opts.txt").text
让人印象深刻的Groovy代码
? File I/O
  – 给文件加行号

   def i = 1
   new File("d:/grails_opts.txt").eachLine{
     println "${i++}: $it"
   }
让人印象深刻的Groovy代码
? File I/O
  – 遍历下一级子目录

   new File("d:/").eachDir { println it }
让人印象深刻的Groovy代码
? File I/O
  – 递归遍历子目录所有中文件

   new File("d:/").eachFileRecurse {
     println it.name
   }
让人印象深刻的Groovy代码
? 集合操作
 – 列表每个值乘2并打印

 [1,2,3].each{ println it*2 }
让人印象深刻的Groovy代码
? 集合操作
 – 返回新集合,其中每个元素是旧集合对应位置
   元素值的3倍

 [1,2,3].collect{ it*3 }
让人印象深刻的Groovy代码
? 集合操作
 – 求和

 [1,2,3].sum()
让人印象深刻的Groovy代码
? 集合操作
 – 列表中是否含有偶数

 [1,2,3].any{ it%2 == 0 }
让人印象深刻的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()}"
 }
让人印象深刻的Groovy代码
? 正则表达式
 – 列出D:下所有txt文件

 new File("d:/").eachFileMatch(~/.*txt/){
   println it.name
 }
让人印象深刻的Groovy代码
? 正则表达式
 – 返回html中<title>的值

 def titleMatcher =
          content =~ /<title>(.*)</title>/
 return titleMatcher[0][1]
Why Goovy?
? 简洁,兼容Java
 – 90%以上的Java代码可以原封不动的在groovy
   环境下运行
 – 自动import常用的包:
   ? java.lang、java.util、java.io、java.net
   ? groovy.lang、groovy.util
Why Goovy?
? 更多简洁代码的示例
 – System.out.println => println
 – 可选的return
 – GString: "${i++}: $it"
 – GroovyBean(左)让JavaBean(右)更简洁
                  class MyBean{
  class MyBean{     private int a
    int a           public int getA(){ return a}
  }                 public void setA(int a){this.a = a}
                  }
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……
友情提示:
以下特点对Java开发者或许陌生,
不要怕,改善生活质量全靠它们了!
Why Goovy?
? 无处不在的闭包
 – 定义:def c= {…}
 – 特点:似函数而非函数,代码即数据
Why Goovy?
? 闭包的妙用:
 – 用Map构造临时对象

 def m = [p:1, showP: {println m.p}]
 m.showP()
Why Goovy?
? 闭包的妙用:
 – 实现接口

 //只实现接口中的一个方法
 {……} as java.awt.event.MouseListener

 methods = [ //用Map实现多个方法
   m1 : {......},//m1和m2为对应实现的方法名
   m2 : {......}
 ]
 methods as java.awt.event.MouseListener
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())
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()
摘自《 The Definitive Guide to Grails 》



                                       ? Grails:JVM下的杀手级应用
                                                             Why Goovy?
Why Goovy?
? 丰富多彩的生态系统




? glu:部署和监控自动化平台(LinkedIn开源)
? asgard:管理基于云的应用和基础设施的Web工具(Netflix开源)
? ……
还有……
? 必需掌握的Groovy高级特性
 – MOP
 – AST Transformation
 – Builder
他们也在用Groovy
? 更确切的说是在用Grails
 – Reuters(路透社)
 – LinkedIn
 – Sky.com
 – NTT
 – Netflix
 – Wired.com
 – 更多的案例:
   ? http://www.grails.org/Success+Stories
Groovy 2.0的新变化
? 更高的性能
 – 支持JDK 7的Invoke Dynamic
 – @CompileStatic
? 对于Java更友好
 – @TypeChecked
? 模块性更强

  详见: http://www.infoq.com/articles/new-groovy-20
参考书目
参考站点
? Grails官方站点:http://grails.org
? Groovy Blogs:http://groovyblogs.org
? GroovyQ:http://www.groovyq.net
摘自:Geek And Poke
                   最后:一则发人深省的漫画……

More Related Content

What's hot (11)

[Crypto Course] Hash
[Crypto Course] Hash[Crypto Course] Hash
[Crypto Course] Hash
WEI CHIEH CHAO
?
Java_07:Thread
Java_07:ThreadJava_07:Thread
Java_07:Thread
Brad Chao
?
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
Alan Tsai
?
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑 手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
luyongfugx
?
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
我和阿九Azure有約 38 Azure Blob Storage 如何省錢?搞懂Access Tier (Alan Tsai 的學習筆記)我和阿九Azure有約 38 Azure Blob Storage 如何省錢?搞懂Access Tier (Alan Tsai 的學習筆記)
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
Alan Tsai
?
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
Simon Su
?
搁颈补的强力后盾:谤别蝉迟+海量存储
搁颈补的强力后盾:谤别蝉迟+海量存储 搁颈补的强力后盾:谤别蝉迟+海量存储
搁颈补的强力后盾:谤别蝉迟+海量存储
zhen chen
?
Web crawler - Scrapy
Web crawler - Scrapy Web crawler - Scrapy
Web crawler - Scrapy
yafish
?
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapy
recast203
?
公司导入容器经验分享与开源技能培养
公司导入容器经验分享与开源技能培养公司导入容器经验分享与开源技能培养
公司导入容器经验分享与开源技能培养
Philip Zheng
?
鲍颁奇趣百科性能优化分享
鲍颁奇趣百科性能优化分享鲍颁奇趣百科性能优化分享
鲍颁奇趣百科性能优化分享
linx4200
?
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
我和阿九Azure有約 34 Azure File Storage 什麼時候適合用Azure File? File vs Disk Storage (Al...
Alan Tsai
?
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑 手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
手机腾讯网闯蝉资源版本增量更新方案飞3肠迟别肠丑
luyongfugx
?
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
我和阿九Azure有約 38 Azure Blob Storage 如何省錢?搞懂Access Tier (Alan Tsai 的學習筆記)我和阿九Azure有約 38 Azure Blob Storage 如何省錢?搞懂Access Tier (Alan Tsai 的學習筆記)
我和阿九Azure有約 38 Azure Blob Storage 如何省錢? 搞懂Access Tier (Alan Tsai 的學習筆記)
Alan Tsai
?
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
Simon Su
?
搁颈补的强力后盾:谤别蝉迟+海量存储
搁颈补的强力后盾:谤别蝉迟+海量存储 搁颈补的强力后盾:谤别蝉迟+海量存储
搁颈补的强力后盾:谤别蝉迟+海量存储
zhen chen
?
Web crawler - Scrapy
Web crawler - Scrapy Web crawler - Scrapy
Web crawler - Scrapy
yafish
?
快快樂樂學 Scrapy
快快樂樂學 Scrapy快快樂樂學 Scrapy
快快樂樂學 Scrapy
recast203
?
公司导入容器经验分享与开源技能培养
公司导入容器经验分享与开源技能培养公司导入容器经验分享与开源技能培养
公司导入容器经验分享与开源技能培养
Philip Zheng
?
鲍颁奇趣百科性能优化分享
鲍颁奇趣百科性能优化分享鲍颁奇趣百科性能优化分享
鲍颁奇趣百科性能优化分享
linx4200
?

Similar to Groovy:Candy for Java Developers (20)

淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
模块一-骋辞语言特性.辫诲蹿
模块一-骋辞语言特性.辫诲蹿模块一-骋辞语言特性.辫诲蹿
模块一-骋辞语言特性.辫诲蹿
czzz1
?
骋谤辞辞惫测介绍
骋谤辞辞惫测介绍骋谤辞辞惫测介绍
骋谤辞辞惫测介绍
profeter
?
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
?
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
?
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
scott liao
?
前端自动化工具
前端自动化工具前端自动化工具
前端自动化工具
國昭 張
?
开发流程与工具介绍
开发流程与工具介绍开发流程与工具介绍
开发流程与工具介绍
Shengyou Fan
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
Wei-Yu Chen
?
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Chu-Siang Lai
?
Node js实践
Node js实践Node js实践
Node js实践
myzykj
?
JCConf 2024 - Java 22 & 23 新功能介紹
JCConf 2024 - Java 22 & 23 新功能介紹 JCConf 2024 - Java 22 & 23 新功能介紹
JCConf 2024 - Java 22 & 23 新功能介紹
Joseph Kuo
?
厂丑别濒濒,信号量以及箩补惫补进程的退出
厂丑别濒濒,信号量以及箩补惫补进程的退出厂丑别濒濒,信号量以及箩补惫补进程的退出
厂丑别濒濒,信号量以及箩补惫补进程的退出
wang hongjiang
?
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
yiming he
?
3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究
Hsiao Tim
?
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Chu-Siang Lai
?
Golangintro
GolangintroGolangintro
Golangintro
理 傅
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
模块一-骋辞语言特性.辫诲蹿
模块一-骋辞语言特性.辫诲蹿模块一-骋辞语言特性.辫诲蹿
模块一-骋辞语言特性.辫诲蹿
czzz1
?
骋谤辞辞惫测介绍
骋谤辞辞惫测介绍骋谤辞辞惫测介绍
骋谤辞辞惫测介绍
profeter
?
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
?
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
?
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
scott liao
?
前端自动化工具
前端自动化工具前端自动化工具
前端自动化工具
國昭 張
?
开发流程与工具介绍
开发流程与工具介绍开发流程与工具介绍
开发流程与工具介绍
Shengyou Fan
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計Hadoop Map Reduce 程式設計
Hadoop Map Reduce 程式設計
Wei-Yu Chen
?
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Chu-Siang Lai
?
Node js实践
Node js实践Node js实践
Node js实践
myzykj
?
JCConf 2024 - Java 22 & 23 新功能介紹
JCConf 2024 - Java 22 & 23 新功能介紹 JCConf 2024 - Java 22 & 23 新功能介紹
JCConf 2024 - Java 22 & 23 新功能介紹
Joseph Kuo
?
厂丑别濒濒,信号量以及箩补惫补进程的退出
厂丑别濒濒,信号量以及箩补惫补进程的退出厂丑别濒濒,信号量以及箩补惫补进程的退出
厂丑别濒濒,信号量以及箩补惫补进程的退出
wang hongjiang
?
2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt2012 java two-desktop-appliction-using-j-ruby-with-swt
2012 java two-desktop-appliction-using-j-ruby-with-swt
tka
?
KISSY for starter
KISSY for starterKISSY for starter
KISSY for starter
yiming he
?
3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究3.android 应用程序通用自动脱壳方法研究
3.android 应用程序通用自动脱壳方法研究
Hsiao Tim
?
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Chu-Siang Lai
?
Golangintro
GolangintroGolangintro
Golangintro
理 傅
?

More from foxgem (9)

浅说痴别谤迟虫
浅说痴别谤迟虫浅说痴别谤迟虫
浅说痴别谤迟虫
foxgem
?
Our Choice:电子书的新交互方式探讨
Our Choice:电子书的新交互方式探讨Our Choice:电子书的新交互方式探讨
Our Choice:电子书的新交互方式探讨
foxgem
?
移动开发的性能优化
移动开发的性能优化移动开发的性能优化
移动开发的性能优化
foxgem
?
持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术
foxgem
?
Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架
foxgem
?
Groovy for Java Programmer
Groovy for Java ProgrammerGroovy for Java Programmer
Groovy for Java Programmer
foxgem
?
OpenParty西安:DSL in Groovy
OpenParty西安:DSL in GroovyOpenParty西安:DSL in Groovy
OpenParty西安:DSL in Groovy
foxgem
?
OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?
foxgem
?
OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?
foxgem
?
浅说痴别谤迟虫
浅说痴别谤迟虫浅说痴别谤迟虫
浅说痴别谤迟虫
foxgem
?
Our Choice:电子书的新交互方式探讨
Our Choice:电子书的新交互方式探讨Our Choice:电子书的新交互方式探讨
Our Choice:电子书的新交互方式探讨
foxgem
?
移动开发的性能优化
移动开发的性能优化移动开发的性能优化
移动开发的性能优化
foxgem
?
持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术持续交付 - 使用云计算和虚拟化技术
持续交付 - 使用云计算和虚拟化技术
foxgem
?
Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架Grails:下一代Java Web开发框架
Grails:下一代Java Web开发框架
foxgem
?
Groovy for Java Programmer
Groovy for Java ProgrammerGroovy for Java Programmer
Groovy for Java Programmer
foxgem
?
OpenParty西安:DSL in Groovy
OpenParty西安:DSL in GroovyOpenParty西安:DSL in Groovy
OpenParty西安:DSL in Groovy
foxgem
?
OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?OpenParty西安:What does DevOps mean?
OpenParty西安:What does DevOps mean?
foxgem
?
OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?OpenParty西安:How to be a good copycat?
OpenParty西安:How to be a good copycat?
foxgem
?

Groovy:Candy for Java Developers