Groovy的故事

换了个欢乐的头像~开心

简介

Groovy 基于 Java 并拓展了 Java。 Java 程序员可以无缝切换到使用 Groovy 开发程序。Groovy 内部会将其编译成 Java class 然后启动虚拟机来执行。Groovy Code 在真正执行的时候已经变成了 Java 字节码,所以 JVM 根本不知道自己运行的是 Groovy 代码。同时,Gradle是一种DSL,即 Domain Specific Language,领域相关语言。


  • 注释标记和Java一样,支持或者/**/
  • 可以不用分号结尾
  • 支持动态类型,即定义变量的时候可以不指定其类型。Groovy 中,
    变量定义可以使用关键字 def。注意:def 不是必须的,但是为了代码清晰,
    建议还是使用 def 关键字
  • 函数定义时,参数的类型也可以不指定
  • 函数的返回值也可以是无类型的
    • 可以不使用returnxxx来设置xxx为函数返回值。如果不使用 return 语句的话,则函数里最后一句代码的执行结果被设置成返回值。
    • 如果函数定义时候指明了返回值类型的话,函数中则必须返回正确的数据类型, 否则运行时报错。
  • 对字符串支持相当强大
    • 单引号''中的内容严格对应 Java 中的 String,不对$符号进行转义
    • 双引号""的内容则和脚本语言的处理有点像,如果字符中有$号的话,则它会$表达式先求值
    • 三个引号'''xxx'''中的字符串支持随意换行
  • 函数调用的时候还可以不加括号
println("test") ---> println "test"

Groovy数据类型

  • Java中的基本数据类型

    int,boolean 这些 Java 中 的基本数据类型,在 Groovy 代码中其实对应的是它们的包装数据类型。比如 int 对应为 Integer,boolean 对应为 Boolean。

  • Groovy中的容器类

    • List:链表,其底层对应Java中的List接口,一般用ArrayList作为真正的实现类。
    • Map:键-值表,其底层对应Java中的LinkedHashMap。
    • Range:范围,它其实是List的一种拓展。

根据 Groovy 的原则,如果一个类中有名为 xxyyzz 这样的属性(其实就是成员变量), Groovy 会自动为它添加 getXxyyzz 和 setXxyyzz 两个函数,用于获取和设置 xxyyzz 属性值。

  • 闭包

    闭包(Closure),是一种数据类型,它代表了一段可执行的代码。
def aClosure = {//闭包是一段代码,所以需要用花括号括起来

    String param1, int param2 -> //这个箭头很关键。箭头前面是参数定义,箭头后面是代码 
    println "this is code" //这是代码,最后一句是返回值,
    //也可以使用 return,和 Groovy 中普通函数一样 
}
定义格式:
def xxx = {paramters -> code} //或者
def xxx = {无参数,纯 code} 这种 case 不需要->符号

如果闭包没定义参数的话,则隐含有一个参数,这个参数名字叫 it,和 this 的作用类
似。it 代表闭包的参数。

def greeting = { "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!' 
等同于:

def greeting = { it -> "Hello, $it!" }
assert greeting('Patrick') == 'Hello, Patrick!'

def noParamClosure = { -> true } // 表示闭包没有参数不能给 noParamClosure 传参数
注意点:
  1. 省略圆括号

    当函数的最后一个参数是闭包的话,可以省略圆括号。

  2. 确定 Closure 的参数

    对 Map 的 findAll 而言,Closure 可以有两个参数。findAll 会将 Key 和 Value 分别传进 去。并且,Closure 返回 true,表示该元素是自己想要的。返回 false 表示该元素不是自己要找的。

你可能感兴趣的:(Groovy的故事)