用Groovy思考 第四章 Groovy特性深入

简介: 1. 断言 Java开发者常常使用JUnit或TestNG做单元测试,所以对断言是很清楚的。断言是用于验证假设的条件是否为真。在Groovy的断言中,如果假设的条件不为真,那么就会抛出java.lang.AssertionError异常。

1. 断言

Java开发者常常使用JUnit或TestNG做单元测试,所以对断言是很清楚的。断言是用于验证假设的条件是否为真。在Groovy的断言中,如果假设的条件不为真,那么就会抛出java.lang.AssertionError异常。使用Groovy表达式来测试假设条件。

比如:
groovy:000> assert 1==2 : "One isn't Two"
ERROR java.lang.AssertionError:
One isn't Two. Expression: (1 == 2)
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

Java的断言也是这么写的:
assert 1==2 : "One isn't Two";

可见,Groovy的断言语法与Java的断言相同,Groovy的断言可以省略分号。

断言的使用技巧:
当你使用断言时,你应用包含一条消息。此消息可以帮助其他人维护和理解你的代码,理清你的意图。

2. 强断言

Groovy的断言assert关键字仅仅是检查表达式是否为真。如果为假,断言仅仅告诉开发者,表达式不成立,以及表达式使用的变量值,除此以外什么都没有。如果使用强断言,断言的输出会提供表达式的每一个子表达式的可视化展现。下面我将详细说明强断言。

groovy:000> assert 1==1: "One isn't Two"
===> null
groovy:000> assert new File('HelloWorld.txt')==new File('Hello.txt')
ERROR org.codehaus.groovy.runtime.powerassert.PowerAssertionError:
assert new File('HelloWorld.txt')==new File('Hello.txt')
       |                         | |
       HelloWorld.txt            | Hello.txt
                                 false
        at groovysh_evaluate.run (groovysh_evaluate:2)
        ...

断言可以方便地对代码进行测试。

3. Strings

Groovy支持两种字符串:常规的Java字符串和GStrings。
在Groovy中,用单引号或双引号括起来的字符串是java.lang.String类的一个实例,

GStrings是groovy.lang.GString类的一个实例,它允许在文本中包含占位符。GStrings并不是String的子类,因为String类是final类型,而且是不能被扩充的。
GString很像普通的字符串,但是他允许在其内使用${..}嵌入变量。如果内嵌的变量只是占位符,那么可以省略{}花括号。

Groovy支持一些编程语言如Perl或Ruby所谓的字符串插入(String Interpolation)。字符串插入是字符串内的表达式或变量的替代。如果你熟悉Unix Shell编程或Ruby、Perl编程,那么你应该很熟悉这一点。

Java不支持字符串插入,你必须手动的进行值连结。

Java的字符串操作例子:
String name = "Jim";
String helloName = "Hello " + name;
System.out.println(helloName);

如果是使用Groovy的GString,那么可以这样:
groovy:000> str1 = "Li Sir"
groovy:000> str2 = "Hello "
groovy:000> println "$str2$str1"
Hello Li Sir

可见,正如前面所讲,如果内嵌的变量只是占位符,那么可以省略{}花括号。

当Groovy看到表达式内的内嵌变量时,Groovy会构造一个org.codehaus.groovy.runtime.GStringImpl来代替java.lang.String。当访问GString时,表达式会被重新计算。
注意,你可以在${}内包含任意有效的Groovy表达式,可以是方法调用或变量名。

4. 单行字符串

单行字符串可以用单引号或双引号包围,但是两者是有区别的。
单引号包围的表达式,里面的字符串插值是不会被识别的。双引号包围的表达式正好相反。

举例:
name = "LiSir"
s1 = 'Hello $name'
println s1

输出:
Hello $name

例子:
name = "LiSir"
s1 = "Hello $name"
println s1

输出:
Hello LiSir

可见,由双引号定义的字符串,其内嵌的表达式会被解释。

5. 多行字符串

Groovy支持字符串跨越多行,多行字符串由三个双引号或者三个单引号定义。
多行字符串对于创建模板(如XML模板)或内嵌的文档(SQL语句、HTML等)是非常有用的。还有很多用途。比如,可以使用多行字符串和字符串插值建立电子邮件的主体内容。

比如:
def name = "Jim"
def multiLineQuote = """
Hello, ${name}
This is a multiline string with double quotes
"""
println multiLineQuote
println multiLineQuote.class.name

def multiLineSingleQuote = '''
Hello, ${name}
This is a multiline string with single quotes
'''
println multiLineSingleQuote
println multiLineSingleQuote.class.name

输出:
Hello, Jim
This is a multiline string with double quotes
org.codehaus.groovy.runtime.GStringImpl

Hello, ${name}
This is a multiline string with single quotes

java.lang.String
目录
相关文章
|
9月前
|
存储 SQL JSON
【编程语言】Groovy入门指南
【编程语言】Groovy入门指南
492 0
|
Java
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
233 0
|
JavaScript 前端开发 Java
第二章 Groovy 基础
Groovy 是基于 JVM 虚拟机的一种动态语言,它的语法和 Java 非常相似,由 Java 入门Groovy,基本上没有任何障碍。Groovy 完全兼容 Java,又在此基础上增加了很多动态类型和灵活的特性,比如支持闭包,支持 DSL,可以说它是一门非常灵活的动态脚本语言。
255 0
第二章 Groovy 基础
|
数据安全/隐私保护 Kotlin
基于 Kotlin 特性实现的验证框架
基于 Kotlin 特性实现的验证框架
121 0
|
Java API 数据安全/隐私保护
【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
【Groovy】Groovy 语言特点简介 ( 支持 Java 语法 | 支持 Java 虚拟机 | Groovy 语言是动态语言 | Groovy 扩展 JDK | 编译时元编程 )
302 0
|
SQL 程序员 数据库
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
【Kotlin】Kotlin 领域特定语言 DSL 原理 一 ( DSL 简介 | 函数 / 属性扩展 )
267 0
|
安全 Java
《Kotlin 程序设计》第九章 Kotlin与Java混合调用
第九章 Kotlin与Java混合调用 正式上架:《Kotlin极简教程》Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item.jd.com/12181725.html 天猫Tmall:https://detail.tmall.com/item.htm?id=558540170670 虽然 Kotlin 的开发很方便,但当你与他人协作时,总会碰到 Java 与 Kotlin 代码共存的代码项目。
1611 0
|
Java BI
《Groovy语言规范》-语法(二)
4.6.斜杠字符串 除了通常的带引号字符串,groovy提供斜杠字符串,使用/作为分隔符。斜杠字符串对于定义正则表达式和模式是特别有用的,因为不需要转义反斜杠。 一个斜杠字符串: def fooPattern = /.
1801 0