学点Groovy之常用语法

本文地址:http://www.jianshu.com/p/b7dae9382886

Groovy支持几乎所有java语法,它从java提取而来,并对其进行一些语法的增加和改动。本文主要在官网指引文档基础上作一些总结和针对常用语法与java的差异性做一个归档。

一 基本语法
正如开头所说,大部分跟java没多大差别,有几个常用的地方可以注意下:

  1. 单引号和双引号都可以用来表示字符串,但是双引号的可以包含替换块,替换块用${}来标记。
  2. 可以[item1, item2, item3]直接表示列表;
  3. 可以[name1:value1, name2:value2]直接表示map。
  4. 所有原始类型的引用在编译时都是装箱后再使用。
  5. 对重载方法的选择在运行期才根据传值来决定,而java在编译期就会根据引用类型来确定调用哪个方法。

二 操作符
groovy支持所有java操作符
增加:
1 n次方操作符**
** 求n次方 如: 5 ** 2 结果为 25
**= 相当于求自身n次方 比如:
def a = 3
a **= 2 结果为9

2 连续操作符 *.
表示对集合对象中的每个元素做相同的操作。比如:
def makes = cars*.name
会对cars这个集合中每个元素的name属性合并为一个list赋给makes

3.范围操作符 ..
(0..5)表示 [0,1,2,3,4,5] 的整型数字,注意:跟java不同的是,这的括号包含上限元素5
(0..<5)表示不包括5
括号里面的元素可以是任何实现了comparable的类对象。

4.飞船操作符 <=>
长得像飞船就起个这样的名字。。。其实很简单,它就是compareTo方法的意思。
比如: 'a' <=> 'z' 结果是false

5.in操作符
表示contains或isCase

6.相等比较 ==
不同于java,groovy中==表示对象的比较,调用的是equals方法,要表示引用的比较的话,应该用is或者对象的is方法来表示

7.强转操作符 as
如果两个类型之间没有继承关系,直接用括号()强转是会抛类型转换异常的,但如果用as来替代就可以,比如 String a = (123 as String),但前提是来源对象的类型需要实现了asType方法,并且正确处理了传进来的目标类型。

三 真假
groovy的真假支持所有零值方式,并且支持matcher的结果,具体来说可分成以下几类(为false):

  1. java通常的true/false
  2. 对象为null
  3. 对象或集合内容为空,包括字符串"",零长度的集合或迭代器
  4. 其它零值,比如 数字 0
  5. matcher,groovy特有的正则表示法 =~ ,或者==~直接返回的比较结果。
  6. 重写类的asBoolean方法, 以本方法返回逻辑为准

四 结构

  1. 支持静态方法导入
    使用import static 可以导入静态方法

  2. 支持脚本
    可以直接写一段脚本或者定义一个脚本方法,代替定义类。
    脚本也可以写在类中,不过需要用特定的api来调用,并且脚本要在内嵌的run方法里写或者调用。

五 对象定义
跟java没有太多不同,常用的定义形式需要注意以下几点:

  1. 可以明确指定变量的类型,也可以不明确类型,不明确指定时,用def修饰。
  2. 方法无返回值时用def关键字修饰方法, 有返回时用返回类型代替这个关键字。
  3. 方法需要返回时,若没有return关键字,则最后一行的对象会被返回。
  4. 方法参数支持默认值。

六 闭包
闭包(Closures)可以理解成匿名的方法。长得有点像方法块,但是可以返回。基本结构是:
一对大括号,可选的参数和一个箭头,若干个语句。
{ [closureParameters -> ] statements }
参数的传递和用法类似于lambda表达式,不过花括号的位置和参数没有的时候箭头可否存在这些细节有点点不一样。

官网介绍:
http://www.groovy-lang.org/documentation.html

你可能感兴趣的:(学点Groovy之常用语法)