首页 > 其他分享 >用Groovy思考 第四章 Groovy特性深入

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

时间:2023-03-28 14:37:58浏览次数:44  
标签:Groovy 断言 表达式 思考 字符串 Hello 第四章 name


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

作者:chszs

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

标签:Groovy,断言,表达式,思考,字符串,Hello,第四章,name
From: https://blog.51cto.com/prettycms/6154760

相关文章

  • 用Groovy思考 第一章 用Groovy简化Java代码
    用Groovy思考 第一章用Groovy简化Java代码作者:chszs1.Groovy的安装目前Groovy的最新版本为2.1.2版,下载地址为:http://groovy.codehaus.org/Download下载后解压groovy-bin......
  • 关于两道笔试题的思考
    1.在32位机器上正确的输出是?structNode{boolval1;intval2;charstr[1023];};Node*p=newNode();std::cout<<sizeof(p)<<std::endl;std::cout......
  • 设计通用流程和可变点的方法一些思考
    平台化与中台设计:新问题与解决方案在从信息化到数字化的转型中,平台化一直是重要的主题之一。随着平台不断向业务领域延伸,平台抽象和建设的难度也呈指数级增加,出现了一系列......
  • Linux基础第四章:用户账户与文件、目录的权限和归属
    一、用户账户1、账户类型①超级管理员:最高权限拥有者,uid=0的用户,默认是root。②普通用户:有一定权限的用户,但是权限受限制。③系统(程序)用户:不是给人用的,是给程序用的,无......
  • 第四章 操作列表
    遍历整个列表#for循环编写for循环时,选择有意义的列表名称大有帮助#如下面的mgicians表示魔术师列表一般性列表,像下面这样编写for循环的第一行代码是不错的选择:ma......
  • 对于Vue3和Ts的心得和思考
    作者:京东物流吴云阔1前言Vue3已经正式发布了一段时间了,各种生态已经成熟。最近使用taro+vue3重构冷链的小程序,经过了一段时间的开发和使用,有了一些自己的思考。总的来说,Vu......
  • 对于Vue3和Ts的心得和思考
    作者:京东物流吴云阔1前言Vue3已经正式发布了一段时间了,各种生态已经成熟。最近使用taro+vue3重构冷链的小程序,经过了一段时间的开发和使用,有了一些自己的思考。总的来......
  • python工程里面的类型的思考
    虽然我的工程语言是python语言,在工程搭建过程中非常注意类型提示的问题。关于方法的方法的返回值类型的问题:常用的方式是在函数/方法书写一些尖头+类型,这样调用方能很方......
  • 由“交卷”功能引发的思考——对比两个字符串数组的差异
    最近在做一个答题系统,在交卷的时候需要判断客观题的答题情况客观题的题型有单选题、多选题、判断题其中判断题可以当做单选题处理,而单选题也可以当做标准答案长度为一的......
  • 章章个人的自我认知及一些思考及思想
    Q:我觉得我同学好聪明,其他课不学,只是学招聘和考研要求的内容。不像我,听着老师的水客=课,在那里生气,妄想改变这个社会和环境。我好愚蠢啊A:亲爱的同学,每个人有不同的学习方......