zoukankan      html  css  js  c++  java
  • Groovy 语法学习

    一、配置 Groovy 环境

    在 cmd 中,运行 groovy -v,如果打印 groovy 版本信息,则说明配置正确。此外 groovy 自带了编辑器(方便运行一些 snippets,当然最后可以另存为 .groovy,然后可以通过 groovy xxx.groovy 运行),可通过命令启动。如下:

    在 IntelliJ IDEA 中创建 groovy 工程:

    IDEA 自带对 groovy 的支持,可以直接选择 Groovy 类型的工程,如下:

    新建工程后,在 src 目录下编辑 Groovy 脚本:

    二、基础语法

    1、语言简介:

    1. 是一种基于 Java 虚拟机的动态语言
    2. 基础语法和 Java 类似
    3. 能够调用已存在的 Java 类库
    4. Groovy 可以作为脚本语言来运行,也可以被编译为 Java 的字节码
    5. 如果仅仅在 Gradle 中使用 Groovy,只需要了解一些基本的 Groovy 知识
    6. 在 Groovy 中可以混写 Java 代码和 Groovy 知识。并且,如果不了解 Groovy 语法,完全可以只写 Java 代码

    2、与 Java 的区别:

    1. 表达式后面的分号可省略(一般是省略)
    2. 缺省情况下,构造函数和方法都是 public 的(Java 默认是 package)
    3. 方法中的 return 语句可选,最后一个表达式的值作为返回值
    4. 编译器自动为属性添加 getter 和 setter 方法。并且可以直接使用属性名来访问属性,但底层还是调用 getter 和 setter(当然 getter 和 setter 可显式声明,自定义)
    5. 当调用 == 来比较两个对象,底层会自动调用 equals 方法
    6. Groovy 非空为真,而 Java 未采用

    3、断言:assert 可用作前置或后置条件的检查,当检查条件不符合时,程序终止运行,并提示错误。Groovy 的断言和 Java 类似,并且运行时不需要指定 -ea 参数。

    4、变量类型:

    • Groovy 不强制要求申明变量类型,即可以使用 def 关键字定义变量(弱类型)。也可以作为强类型语言使用
    • 注意:类比于 JavaScript 中的 var,但不同的是 Groovy 不指定变量类型,在赋值之前,变量为 Object 类型。好像现在 Java10 也支持 var 了
    • 未赋值之前,变量值为 null
    • 当为变量赋值之时,变量的类型才确定(使用 var,则为弱类型语言,类型可改变)
    • 方法的参数、返回值类型同理

    5、运算符:三目运算符 & Elvis 运算符:

    //最开始
    def name = 'a'
    def test = name != null ? name : 'b'
    //Groovy 支持非空为真
    name = 'a'
    test = name ? name : 'b'
    //为了“不重复”,才有了 Elvis 运算符
    name = 'a'
    test = name ?: 'b'

    6、参数列表括号:当函数有参数时,可以省略括号。如:func(val1, val2),等价于 func val1, val2。

    7、字符串:

    单引号字符串:和 Java 的 String 等效
    双引号字符串:是一种新的字符串类型,称为 GString:可以在字符串中使用 $ 符号引用变量;可以使用 ${} 计算表达式的值。这带来了很多便捷
    三引号字符串:可以保持格式,比如跨多行

    8、List 集合:

    • 默认使用 Java 的 ArrayList
    • 使用方括号 [] 表示 List,值用逗号分隔
    • 使用 << 运算符向最后添加一个元素
    • 却可以使用数组化方式访问元素
    • 使用 each 方法, lambda 作为参数,来遍历元素(好像不是 lambda,而是闭包)
    • 其余方法和 Java 是类似的

    9、Map 集合:

    • 默认使用 Java 的 LinkedHashMap
    • 使用方括号表示 Map,值用逗号分隔。与 List 的区别在于:值为键值对,如 ['name1': 'value1', 'name2': 'value2']
    • 通过为 new Key 赋值,添加新的元素,如 map[newKey] = value
    • 可以使用点号访问键值对,如 map.key,可以使用数组下标方式访问 key
    • 使用 each 方法遍历元素,元素为键和值

    例程(个人觉得,因为 Groovy 是脚本语言吧,所以可以不在类中,而是直接运行一些 "语法糖" ):

    10、接下来就是比较帅气、也相对重要的部分了——闭包 Closure:

    • Groovy 中的闭包是一块代码(类似于 lambda 表达式。个人感觉就是把 lambda 包起来了)
    • 可以赋值给变量、作为参数传递、像普通的方法被调用
    • 闭包的类型是 groovy.lang.Closure
    • 无参的闭包默认包含一个叫 it 的参数(隐式参数):闭包本身没有参数,但是调用时,it 代表传进来的第一个参数;如果调用时没有提供参数,那么 it 的值为 null
    • 闭包总有一个返回值:如果没有显示使用 return 语句,而且最后一个表达式没有值,那么返回 null

    例如:

    def closure = { key, value ->
        println value
    }

    委托:简言之,就是被委托者,可以使用管理委托者吧。不过暂时用不着,以后再更新。

     好嘛,我就是还没搞懂。在老师的例程中,完全没看出委托的作用,不过师傅领进门足矣。由于见识浅薄,对委托也无法熟练应用,等需要了、学会了,再记录。可能学过设计模式就能懂了吧(剑23,嘿嘿)。

  • 相关阅读:
    【USACO】clocks 遇到各种问题 最后还是参考别人的思路
    【USACO】calfflac
    【USACO】namenum
    【USACO】beads
    最大流问题
    模运算性质 摘自百度百科
    学历是铜牌,能力是银牌,人脉是金牌,思维是王牌
    U盘版Windows 10已经在亚马逊Amazon開始接受预订啦
    hadoop实验:求气象数据的最低温度
    Appium Android Bootstrap源代码分析之启动执行
  • 原文地址:https://www.cnblogs.com/quanxi/p/10429441.html
Copyright © 2011-2022 走看看