Successfully reported this slideshow.
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>  <lang...
让人印象深刻的Groovy代码• 正则表达式 – 列出D:下所有txt文件 new File("d:/").eachFileMatch(~/.*txt/){   println it.name }
让人印象深刻的Groovy代码• 正则表达式 – 返回html中<title>的值 def titleMatcher =          content =~ /<title>(.*)</title>/ return titleMatcher...
Why Goovy?• 简洁,兼容Java – 90%以上的Java代码可以原封不动的在groovy   环境下运行 – 自动import常用的包:   • java.lang、java.util、java.io、java.net   • gr...
Why Goovy?• 更多简洁代码的示例 – System.out.println => println – 可选的return – GString: "${i++}: $it" – GroovyBean(左)让JavaBean(右)更简洁 ...
Why Goovy?• 更好用的集合 – 优化定义:  • List: [1, 3, 4, 1, 8, 9, 2, 6]  • Map: [C++ : Stroustrup , Java : Gosling , Lisp :    McCart...
友情提示:以下特点对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...
Why Goovy?• Duck Typing:更高级的多态 – 如果走路像鸭子,叫声像鸭子,那它就是鸭子   class Rectangle{      def draw(){        println "This is rectangl...
Why Goovy?• GPars:并发编程其实也不是那么难 :) – 从Groovy 1.8起,作为扩展包随Groovy发布。 – 对多种并发编程模型提供了简洁的DSL:    • Actor、STM、Agent、CSP、Data Flow等...
摘自《 The Definitive Guide to Grails 》                                       • Grails:JVM下的杀手级应用                            ...
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...
Groovy 2.0的新变化• 更高的性能 – 支持JDK 7的Invoke Dynamic – @CompileStatic• 对于Java更友好 – @TypeChecked• 模块性更强  详见: http://www.infoq.com...
参考书目
参考站点• Grails官方站点:http://grails.org• Groovy Blogs:http://groovyblogs.org• GroovyQ:http://www.groovyq.net
摘自:Geek And Poke                   最后:一则发人深省的漫画……
Upcoming SlideShare
Loading in …5
×

Groovy:Candy for Java Developers

754 views

Published on

Published in: Technology, News & Politics
  • Be the first to comment

Groovy:Candy for Java Developers

  1. 1. Groovy: Candy for Java Developers by @foxgem
  2. 2. Why Groovy? 看几个例子先!
  3. 3. 让人印象深刻的Groovy代码• File I/O – 获取文件内容 new File("d:/grails_opts.txt").text
  4. 4. 让人印象深刻的Groovy代码• File I/O – 给文件加行号 def i = 1 new File("d:/grails_opts.txt").eachLine{ println "${i++}: $it" }
  5. 5. 让人印象深刻的Groovy代码• File I/O – 遍历下一级子目录 new File("d:/").eachDir { println it }
  6. 6. 让人印象深刻的Groovy代码• File I/O – 递归遍历子目录所有中文件 new File("d:/").eachFileRecurse { println it.name }
  7. 7. 让人印象深刻的Groovy代码• 集合操作 – 列表每个值乘2并打印 [1,2,3].each{ println it*2 }
  8. 8. 让人印象深刻的Groovy代码• 集合操作 – 返回新集合,其中每个元素是旧集合对应位置 元素值的3倍 [1,2,3].collect{ it*3 }
  9. 9. 让人印象深刻的Groovy代码• 集合操作 – 求和 [1,2,3].sum()
  10. 10. 让人印象深刻的Groovy代码• 集合操作 – 列表中是否含有偶数 [1,2,3].any{ it%2 == 0 }
  11. 11. 让人印象深刻的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()}" }
  12. 12. 让人印象深刻的Groovy代码• 正则表达式 – 列出D:下所有txt文件 new File("d:/").eachFileMatch(~/.*txt/){ println it.name }
  13. 13. 让人印象深刻的Groovy代码• 正则表达式 – 返回html中<title>的值 def titleMatcher = content =~ /<title>(.*)</title>/ return titleMatcher[0][1]
  14. 14. Why Goovy?• 简洁,兼容Java – 90%以上的Java代码可以原封不动的在groovy 环境下运行 – 自动import常用的包: • java.lang、java.util、java.io、java.net • groovy.lang、groovy.util
  15. 15. 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} }
  16. 16. 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……
  17. 17. 友情提示:以下特点对Java开发者或许陌生,不要怕,改善生活质量全靠它们了!
  18. 18. Why Goovy?• 无处不在的闭包 – 定义:def c= {…} – 特点:似函数而非函数,代码即数据
  19. 19. Why Goovy?• 闭包的妙用: – 用Map构造临时对象 def m = [p:1, showP: {println m.p}] m.showP()
  20. 20. Why Goovy?• 闭包的妙用: – 实现接口 //只实现接口中的一个方法 {……} as java.awt.event.MouseListener methods = [ //用Map实现多个方法 m1 : {......},//m1和m2为对应实现的方法名 m2 : {......} ] methods as java.awt.event.MouseListener
  21. 21. 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())
  22. 22. 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()
  23. 23. 摘自《 The Definitive Guide to Grails 》 • Grails:JVM下的杀手级应用 Why Goovy?
  24. 24. Why Goovy?• 丰富多彩的生态系统• glu:部署和监控自动化平台(LinkedIn开源)• asgard:管理基于云的应用和基础设施的Web工具(Netflix开源)• ……
  25. 25. 还有……• 必需掌握的Groovy高级特性 – MOP – AST Transformation – Builder
  26. 26. 他们也在用Groovy• 更确切的说是在用Grails – Reuters(路透社) – LinkedIn – Sky.com – NTT – Netflix – Wired.com – 更多的案例: • http://www.grails.org/Success+Stories
  27. 27. Groovy 2.0的新变化• 更高的性能 – 支持JDK 7的Invoke Dynamic – @CompileStatic• 对于Java更友好 – @TypeChecked• 模块性更强 详见: http://www.infoq.com/articles/new-groovy-20
  28. 28. 参考书目
  29. 29. 参考站点• Grails官方站点:http://grails.org• Groovy Blogs:http://groovyblogs.org• GroovyQ:http://www.groovyq.net
  30. 30. 摘自:Geek And Poke 最后:一则发人深省的漫画……

×