Groovy学习之——基础篇

一、比较Java与Groovy

Groovy几乎100%兼容Java,除了task本身需要使用Groovy的DSL定义外

task taskname << {
  //Groovy语法
  //或者Java语法
  //或者两者混搭
}

对于简单的POJO(Plain Ordinary Java Object简单Java对象),Java需要写getter和setter方法,但是Groovy只需要如下代码:

class ProjectVersion{
  Integer major //主版本号
  Integer minor //次版本号
  
  ProjectVersion(Integer major,Integer minor){
    this.major = magor
    this.minor = minor
  }
}

除此之外的特性还有:

在没有return的情况下,方法体最后一个表达式的值会作为返回值。

如果用==比较两个类的实例,在底层Groovy会调用equals()方法,避免空指针异常。

二、Groovy特性

1.assert断言

assert用来验证代码前置或者后置条件,编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。


def version = 12
assert version == 12

def version = 12
assert version == 12
version++
assert version == 12

2.可选类型定义

Groovy并不强壮要求显示声明变量类型、方法参数或者返回值类型。可以使用def关键字进行简单的标示,运行时Groovy通过所赋的值分析其类型。

3.可选的括号

方法签名需要至少一个参数的话,则方法调用可以省略括号,这个特性被用来创建更自然的DSL语言。

initProjectVersion(1, 2)
initProjectVersion 1, 2

println('Groovy is awesome!')
println 'Groovy is awesome!'

4.字符串

第一种和第二种为单引号和双引号,和Java中的String类型相同。

第三种,使用三个引号包起来,这在多行文本中很有用(比如SQL语句),见代码:

def myString1 = 'This is a single-quoted String'
def myString2 = "This is a double-quoted
String" 
def myString3 = """
  This
  is
  multiline
  String
"""

5.Groovy字符串(GString)

在Groovy中双引号字符串更为强大,可以和美元符号 $及花括号 {...}合使用,在运行时,Groovy会计算其中的表达式组成一个字符串,见代码:
def language = 'groovy'
def sentence = "$language is awesome!"
assert sentence == 'groovy is awesome!'
println sentence
def improveSentence = "${language.capitalize()} is awesome!"
assert improveSentence == 'Groovy is awesome!'
println improveSentence


6.集合API

List

在方括号中放入一串以逗号分隔的值,就可以初始化新的List,可以通过左移符号<<向List中添加新的符号。


def buildTools = ['Ant','Maven']
assert buildTools.getClass() == java.util.ArrayList
assert buildTools.size() == 2
assert buildTools[1] == 'Maven'

buildTools << 'Gradle'
assert buildTools.size() == 3
assert buildTools[2] == 'Gradle'

buildTools.each {
  content -> println content
} 

Map

处理Map比处理List更加容易,在方括号中放入一串用逗号分隔的键值对就可以创建新的Map

def inceptionYears = ['Ant' : 2000, 'Maven' : 2004]
assert inceptionYears.getClass() == java.util.LinkedHashMap
assert inceptionYears.size() == 2
assert inceptionYears.Ant == 2000
assert inceptionYears['Ant'] == 2000

inceptionYears << ['Gradle' : 2009]
assert inceptionYears.size() == 3
assert inceptionYears['Gradle'] == 2009

inceptionYears.each{buildTool,year ->
  println "$buildTool was first released in $year"
}






猜你喜欢

转载自blog.csdn.net/qq_39385118/article/details/80402047
今日推荐