Groovy学习之——基础篇,groovy基础篇
分享于 点击 11827 次 点评:198
Groovy学习之——基础篇,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"
}
相关文章
- 暂无相关文章
用户点评