Groovy   发布时间:2022-04-12  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Groovy 1.8 新特性: 增强的DSL和闭包特性大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

然 JDK7 千呼万唤不出来,Groovy 还是如期升级到 1.8 版本。大致读了下 Release Notes,改动不大(大了还得了),但是亮点还是有的。

加强的 DSL 特性:

把 Scala 和旧版的 Groovy 进行比较,会发现 Groovy 被迫写了很多点和括号,而 Scala 则看起来更像是自然的英语。前几天我还絮叨过这个问题,但现在有所不同了

   1: turn left then right
   2: paint wall with red,green and yellow

印象深刻!

在新版本中,a b c d 等同于 a(b).c(d),由此,可以写出更自然的 DSL。(支持多参数、闭包和命名参数)

PS: 对多数人来说,写 DSL 的情况不多,但是多半接触过 Gradle、Grails 等工具,多少会有了解。要做出好的设计,必须对 command chains 的模式(谁知道有没有现有的模式对应?我记得以前用过一种不断返回自身的连续接口,中文叫啥来着,和这个类似,但要简单很多)很熟悉。即使不写 DSL,在脚本中应用以上的特性也是很能改善可读性的。

性能提升:

1.8.x 将对基础类型和方法调用做大量的优化(目前 int 的四则运算和比较已经被优化了)。Groovy 由于其动态模型必须在计算前作大量的检查,在新版本中,如果符合一定的前提条件,则这些检查将被略过,从而加快执行速度。

PS II. 如果细读文档会发现这些优化目前仅针对相当受限的条件,比如提到的整数运算,如果你计算 int + int,那么就可以得到优化的速度,可如果计算 int + int + long 则立刻回到原有的模式。但需要强调的是,代码原来怎么写,现在还怎么写,不要去迎合这些优化。否则,1.9 版本一出,难道重写所有代码

PS III. 而且我对 Groovy 的性能要求也不高,至少以前单位里的那些小白鼠也没有因为我用了 Groovy 就来投诉我的。就算万一遇到瓶颈了,还可以用 Groovy++ 来顶一下。以前没有吧 Groovy++ 作为首选,但现在 Groovy 的 Windows 安装包里已经认包含了 Groovy++,官方的态度也算是不言自明了吧。

GPars

说实在,这个我真不太关心。主要是觉得要是这玩意管用,那我的 Scala 不是白学了么,老子又不是搞科研的

Groovy 1.8 新特性: 增强的DSL和闭包特性

。话如此,多核时代,多点选择还是好的。

增强的闭包!!

这个喜欢。

首先是闭包现在可以作为注释的参数了:(例程我改过了,原来的代码能说明意思,但本身有问题)

1: import java.lang.Annotation.*
   2:  
   3: @Retention(RetentionPolicy.RUNTIME)
   4: @interface Invariant {
   5:     Class value() //此处value()将返回注释参数的class
   6: }
   7:  
   8: @Invariant({ number >= 0 }) //在新版本中,闭包可以作为注释的参数
   9: class Distance {
  10:     def number,unit
@H_618_113@  11: }
  12:  
  13: //以下我对Release Notes中的范例做了修改,原版的代码显然是……错的
  14: def Anno = Distance.getAnnotation(Invariant) //这里和Java的用法相同
  15:  
  16: Object[] args = [[number: 12],[unit: 'km']] //这是针对下一行的newInstance函数(Groovy的Class类方法
  17: def check = Anno.value().newInstance(args) //注意这里check是Distance下的闭包,而不是Distance的实例
  18: println check.class
  19:  
  20: assert check()

这二十行代码可能看起来没有什么用,但对于框架设计者来说则提供了很多有趣的可能。(比如“按合约设计”)

然后是闭包之间的组合(这个帅呆了)

1: triple = { it * 3 }
   2: square = { it ** 2 }
   3:  
   4: tripleBeforeSquare = triple >> square
   5: assert tripleBeforeSquare(1) == 9 // square(triple(1))
   6:  
   7: tripleAfterSquare = triple << square
   8: assert tripleAfterSquare(1) == 3 // triple(square(1))

大佬总结

以上是大佬教程为你收集整理的Groovy 1.8 新特性: 增强的DSL和闭包特性全部内容,希望文章能够帮你解决Groovy 1.8 新特性: 增强的DSL和闭包特性所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。