加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

1groovy学习笔记

发布时间:2020-12-14 16:42:19 所属栏目:大数据 来源:网络整理
导读:groovy学习笔记 groovy是一门类似于java的语言,在java语言的基础上,它吸收了很多脚本的特性,比如python,ruby。跟java一样,每个groovy文件也是编译成class文件,在JVM上运行。但是相比java,groovy的表达方式会更为简便。最近通过http://groovy.zeroleaf.

groovy学习笔记

groovy是一门类似于java的语言,在java语言的基础上,它吸收了很多脚本的特性,比如python,ruby。跟java一样,每个groovy文件也是编译成class文件,在JVM上运行。但是相比java,groovy的表达方式会更为简便。最近通过http://groovy.zeroleaf.com/core-syntax.html和http://docs.groovy-lang.org/next/html/documentation/来学习groovy。这2篇其实是差不多的,前一个是简单的中文版,是一些groovy的基础语法。后一个是英文原版。
我是一个IDE重度患者,所以选择使用IntelliJ来学习groovy。

环境配置

下载groovy库

下载安装 sdkman,执行下面命令,按照提示安装即可

$ curl -s http://get.sdkman.io | bash

使环境变量生效

$ source "$HOME/.sdkman/bin/sdkman-init.sh"

安装 Groovy

$ sdk install groovy

此时可以查看groovy版本

192:~ fish$ groovy -v
Groovy Version: 2.4.7 JVM: 1.7.0_79 Vendor: Oracle Corporation OS: Mac OS X

OK,groovy安装成功

配置IntelliJ

IntelliJ安装的时候默认就会装上groovy插件,我们只要配置下project sdk和groovy library就好了

1、把groovy库从.sdkman复制出来,放到另一个目录。我是把groovy文件夹从/Users/fish/.sdkman/candidates/拷贝到/Users/fish/Documents/。
(因为.sdkman是隐藏文件,所以选择groovy library的时候没办法点到,所以我才把它拷贝出来,这1步应该可以省略的,希望)

2、点击new project,在左边列表选择groovy,右边project sdk选择jdk 1.8,groovy Library点击Create,然后选择/Users/fish/Documents/groovy/2.4.7,结果如下所示

3、点击next 就可以了创建一个空的groovy工程了
4、在src下new->groovy script,创建一个groovy脚本,在里面输入

printf "aaa"

点击右键run就可以看到控制台上输出了aaa。
至此,groovy环境配置完成,以后就可以用IntelliJ来开发groovy工程了。
好了,可以开始groovy学习之旅了

标识符

普通标识符

标识符(identifiers)以字母,美元符号$ 或者下划线开始. 不能以数字开始,如下所示,注意定义一个变量要写def,不用写明变量类型,因为groovy是动态类型的语言。当然写明变量类型也可以,此时就不用写def了。

def name
def item3
def with_underscore
def $dollarStart
//定义了一个String
def sex="male"
//定义了一个Integer
def age=4
//定义了一个map
def map = [:]

引用标识符

引用标识符(quoted identifiers)位于点表达式(dotted expression)的点号之后.

  • 如下所示可以用map.'a',来访问map的值,这就是引用标识符
  • 这里a的引号也可以不用写,map.a,结果是一样的。
  • 但是如果像L12不写引号的话,就是语法错误,必须加上引号,因为里面有空格
//定义一个map
def map = [:]
map."an identifier with a_3_2 space and double quotes" = "ALLOWED"
map.'with-dash-signs-and-single-quotes' = "ALLOWED"
map.'a'='b'

assert map.'a'=='b'
assert map.a=='b'

//语法错误
//assert map.an identifier with a_3_2 space and double quotes == "ALLOWED"
assert map."an identifier with a_3_2 space and double quotes" == "ALLOWED"
assert map.'with-dash-signs-and-single-quotes' == "ALLOWED"

groovy 字符串

字符串形式

首先来看下groovy字符串的表现形式,字符串表示的形式多种多样,如下所示

def map = [:]
map.'dollar slashy string'="dollar"
//如下类型字符串作为引用标识符都是对的
map.'single quote'
map."double quote"
map.'''triple single quote'''
map."""triple double quote"""
map./slashy string/
assert map.$/dollar slashy string/$=="dollar"

//稍微特殊的GString,也是对的
def firstname = "Homer"
map."Simson-${firstname}" = "Homer Simson"

assert map.'Simson-Homer' == "Homer Simson"

Groovy有java.lang.String和groovy.lang.GString两中字符串对象类型
单引号和三单引号字符串都是String,不支持插值.
双引号字和三双引号符串在没有插入表达式(interpolated expression)的情况下双引号字符串为 java.lang.String; 如果有,则为 groovy.lang.GString
当创建如下的字符串:

def startingAndEndingWithANewline = '''
line one
line two
line three
'''
assert strippedFirstNewline.startsWith('n')

字符串插值

字符串插值,可以用${}进行插值,如下所示

def name = 'Guillaume' // a_3_2 plain string
def greeting = "Hello ${name}"
//plain
def greeting2 = "Hello${'girl'}"

assert greeting.toString() == 'Hello Guillaume'
println(greeting)
println(greeting2)

GString toString

当一个方法(不管是在 Java 还是在 Groovy 中实现)期望一个java.lang.String,但我们传入一个 groovy.lang.GString 实例时,GString 的 toString() 方法会自动,透明地被调用.

String takeString(String message) {
    assert message instanceof String
    return message
}

def message = "The message is ${'hello'}"
assert message instanceof GString

def result = takeString(message)
assert result instanceof String
assert result == 'The message is hello'

GString 和 String 的哈希码

尽管插值字符串可以用来代替普通 Java 字符串,但它们与普通字符串在某一方面还是有区别的: 即它们的哈希码(hashCodes)是不一样的. 普通 Java字符串是不可变的,然而 GString 的结果字符串 表示是可变的,取决于它的插入值. 即使结果字符串相同,GString 和 String 还是有不同的哈希码.

//左边是插值字符串,右边是普通字符串,hashcode不一致
assert "one: ${1}".hashCode() != "one: 1".hashCode()

def key = "a"
def m = ["${key}": "letter ${key}"]

assert m["a"] == null

backslash

你会发现结果字符串的第一个字符是一个换行符. 可以用反斜杠(backslash)转义换行符来移除该字符:

def strippedFirstNewline = ''' line one line two line three '''
assert !strippedFirstNewline.startsWith('n')

unicode

groovy还可以支持unicode字符,如下所示

//欧元货币符号
def a='The Euro currency symbol: u20AC'
printf(a)

结果The Euro currency symbol:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读