【Gradle 二】Groovy简介

142 阅读4分钟

Groovy是一种基于Java虚拟机的动态语言,也是一种面向对象编程语言。该语言特别适合于Spring的动态语言一起使用。在使用Groovy编程时,Java有的Groovy几乎都有。Groovy类就是Java类,Java语义都保留下来了。

动态语言和静态语言的区别是什么?

  • 静态语言在编译时进行类型检查,变量的类型在编译时确定,并且类型信息通常是静态的,不会在运行时改变。编译器可以根据类型信息进行一些优化,并在编译时发现一些潜在的错误。常见的静态语言有Java、C、C++等。

  • 动态语言在运行时进行类型检查,变量的类型在运行时确定,并且类型信息通常是动态的,可以在运行时改变。动态语言相对灵活,允许在运行时进行类型转换和修改变量的类型。常见的动态语言有Python、JavaScript、Ruby等。

1.Gradle和Groovy的关系

  1. 首先,Gradle是一种构建工具,它使用了Groovy作为其构建脚本的编程语言。Gradle构建脚本使用Groovy语言编写,这意味着可以在Gradle构建脚本中直接使用Groovy语法和特性。
  2. 其次,Gradle利用了Groovy的动态语言特性来定义和配置项目的构建逻辑。通过使用Groovy的领域特定语言(DSL),Gradle提供了一种简洁而强大的方式来描述和自定义构建过程,使得构建脚本更加易于编写、理解和维护。
  3. 此外,Gradle还充分利用了Groovy的元编程能力,使得用户可以在构建过程中动态地修改和扩展构建逻辑。通过使用Groovy的元编程能力,可以实现一些高级的构建自定义和插件开发,进一步增强了Gradle的灵活性和可扩展性。

2.groovy简介

  • groovy是一种java脚本,运行在JVM上。既可以面向对象编程,又可以作为脚本。
  • groovy和java的区别是:完成同样的任务所需要的groovy代码比java代码少。

3.groovy的特点

  1. 提供动态类型转换、闭包和元编程
  2. 支持函数式编程,不需要main函数
  3. 默认导入常用的包
  4. 类不支持default作用域,默认作用域为public
  5. groovy基本类型是对象,可以直接调用对象中的方法
  6. 支持DSL(Domain Specific Language 领域特定语言)
  7. 基于java语言,兼容java语法

4.groovy基本语法

  1. 完全兼容java语法,也可以作为脚本型语言
  2. 在一个groovy文件中可以混合类的定义和脚本定义,此时不要再定义一个和文件同名的类
  3. 使用def定义变量、方法,不建议使用具体的数据类型
  4. 单行注释用//,多行注释用/**/
  5. 语句末尾分号可以省略
  6. 默认类、方法、字段都是public的
  7. 对象属性赋值
    1. 对象.属性名 = xxx
    2. 对象.setter方法(groovy可以为属性自动生成getter、setter方法)
    3. 具名构造器
  8. 对象属性读取
    1. 对象.属性名
    2. 对象["属性名"]
    3. 对象.getter方法
  9. 方法
    1. 声明方法时,可以省略参数类型、返回值类型
    2. return语句可以省略,默认使用方法最后一句的返回值作为方法返回值
    3. 调用方法时,在不引起歧义的情况下,()可以省略
  10. 引号
    1. 单引号:作为纯字符串使用,不支持变量引用,不支持换行
    2. 双引号:支持变量引用 ${变量名},不支持换行
    3. 三引号:不支持变量引用,支持换行操作

5.groovy类和java类的主要区别

  1. 没有可见性修饰符(public、protected、private)的类或方法默认是public的
  2. 没有可见性修饰符的字段将自动生成getter、setter,不需要显示的setter、getter方法
  3. 如果属性声明为final,则不会生成setter

6.groovy集合操作

  1. List
    1. add():添加某个元素
    2. plus():添加某个List集合
    3. remove():删除指定下标的元素
    4. removeElement():删除某个指定的元素
    5. removeAll():移除集合部分元素
    6. pop():弹出List中最后一个元素
    7. putAt():修改指定下标的元素
    8. each():遍历
    9. size():获取List中元素的个数
    10. contains():判断List是否包含指定的值
  2. Map
    1. put():向Map中添加元素
    2. remove():根据某个键、键值对做移除
    3. +、-:支持map集合的加减操作
    4. each():遍历map集合

7.闭包

  • 是一个匿名代码块,可以接受参数,也可以有返回值,可以引用其周围作用域声明的变量
  • 语法:
    • { [params -> ] statements}
      
  • 调用方法:
    • 将闭包赋值给一个变量
    • 变量名()、变量名.call()