[Learning-Groovy读书笔记]Java Vs Groovy

Java Vs Groovy

函数的默认参数

Grooy可以设置函数参数的默认值。例如

def salute(message="hello!") {println message}
salute()
salute("Hi donkey")

执行结果如下:

hello!
Hi donkey

boilerplate code生成器

groovy.transform下提供了一系列的Annotation可修改AST从而在现有的代码基础上生成新的代码。

AnnotationDescription
@EqualsAndHashCode可生成equals和hashCode方法
@TupleConstructor生成Constructor参数为Class中定义的Field,参数顺序按照Class中定义Field的顺序
@ToString生成toString方法
@Canonical包含@EqualsAndHashCode, @TupleConstructor和@ToString

正则表达式

Groovy中可用/…/来定义正则表达式。

  • ==~ /…/ 是否匹配
  • =~ /…/ 返回Match对象。从而可通过Group等取得详细的匹配信息。

例如:

def mailPattern = ~/([\w.]+)@([\w.]+)/
def isMail = 'adam@email.com' ==~ mailPattern
println isMail
def mailMatch = 'adam@email.com' =~ mailPattern
if(mailMatch.find())println mailMatch.group(1)

执行结果如下:

true
adam

数组

Java总对于数组是没有forEach方法的,Groovy进行增强提供了each方法,类如

['foo', 'bar'].toArray().each{println it}

执行结果如下:

foo
bar

可省略的分号

Groovy 中默认情况下以行为单位表示语句的结束。换句话说对于Java必须的分号在groovy中是可选的。

需要注意的是当使用fluent API时,需要以 xxxx.的形式来编码。例如:

class Pie{
 def bake(){this}
 def make(){this}
 def eat(){this}
}
def pie = new Pie().
           make().
           bake().
           eat()
 // The following syntax will be comile error
// def pie = new Pie()
//          .make()
//          .bake()
//          .eat()

函数调用中可省略的括号

在函数调用中,Groovy可省略括号。

  • 当有参数时。无参数时不可省略。

    // call a method named "doStuff" with parameter 1
    doStuff 1
    //call "doStuff" with three parameters:
    doStuff 1, 2, 3
    
  • 当Closure是最后一个参数或者是唯一一个参数时

      list.each { item -> doStuff(item) }
    

布尔值解析(和Javascript)一样

和Java中的明确的布尔类型定义不同,Groovy和javascript类似,在推导布尔值时,如下类型也可使用:

  • 字符串.空字符串为False.
  • 列表或者数组。空列表或者数组为False.
  • 空指针.空指针为False
  • 数值类型. 0 为false

Map类型

可以通过".key“的形式访问Map中的元素。

   def key = "red"
   def colors = [(key): 1, "blue":2, "Green":3]
   println colors

执行结果如下:

[red:1, blue:2, Green:3]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值