Groovy 语法-控制结构:if,switch,for,try等知识

网站建设4年前发布
46 0 0

本篇内容为Groovy学习第30篇内容,从本篇开始将会学习Groovy语法中的控制结构,例如:if/else,switch/case ,try/cathc 等等。,控制结构是指以某种顺序执行的一系列动作,用于解决某个问题。最基本的控制结构分为:顺序,选择,循环。,Groovy中的条件控制语句和java中的是一样的,也是if-else 和switch - case,Groovy支持来自Java的常用if - else语法。实现示例如下:,也支持常见的if else if 嵌套格式:,Groovy中的switch语句向后兼容Java代码;因此,您可以在多个匹配的情况下共享相同的代码。,不过有一个区别是,Groovy switch语句可以处理任何类型的switch值,并且可以执行不同类型的匹配。,示例如下:,Switch支持以下几种比较:,如果以上任何一个都没有被使用,那么如果case值等于开关值,则case值匹配。,当使用闭包大小写值时,默认的it参数实际上是switch值(在我们的示例中是变量x)。,Groovy还支持如下示例所示的switch表达式:,简单介绍几种常见的,也是必须掌握的循环结构,例如for,while,do while结构写法。,Groovy支持标准的Java 或 C 语言的for循环:,也支持使用逗号分隔表达式的更复杂的Java经典for循环形式。例子:,上一篇介绍的多赋值操作与for语句也可以结合使用。29. Groovy 语法-变量定义与多重赋值 (zinyan.com),PS:多赋值操作是从Groovy 1.6 版本开始支持的。如果你的编译器报错,那么说明你的sdk版本太老了。,Groovy中的for循环要简单得多,可用于任何类型的数组、集合、Map等。,Groovy还支持使用冒号的Java冒号变体:for (char c: text) {}的循环结构。,Groovy像Java一样支持常见的while{…}循环:,要注意,while的循环方法如果创建的条件不对,是容易出现无限循环的,也就是死循环。,因为while的条件一直为true的话,while就不会退出了。,和while一样,Groovy中的do...while 循环语句和java中的实现是一样的。,异常处理,其实也是控制结构的一种。通过异常进行强制结束程序的执行顺序。,Groovy没有特殊的异常处理机制,它的Exception是和java的处理是一样的。,可以指定一组完整的try-catch-finally、try-catch或try-finally块。,简单理解try语句就是,当某段代码出现了异常的时候,为了避免程序崩溃。我们主动进行防护。,就是使用try语句来实现的。catch只是出现了异常后我们需要程序执行的内容。,如果没有异常,将会自动按照顺序执行代码(ps:不会执行cath里面的代码)。,简单的示例如下:,如果想代码不管是否出现异常,都进行执行。并根据异常或非异常的结果进行计算并执行。那么我们可以使用finally子句,因为无论try子句中的代码是否抛出异常,finally子句中的代码都将始终执行。,示例如下:,使用多捕获块(自Groovy 2.0以来),我们能够定义几个要被捕获并由相同捕获块处理的异常:,对于自动资源管理(ARM), Groovy通常为Java 7的try-with-resources语句提供更好的替代方案。现在,迁移到Groovy并仍然希望使用旧风格的Java程序员支持这种语法:,将会输出以下内容:,与Groovy共享assert关键字的Java不同,后者在Groovy中的行为非常不同。首先,Groovy中的断言总是独立于JVM的-ea标志执行。这使得它成为单元测试的首选。“强大断言”的概念与Groovy断言的行为方式直接相关。,一个强大断言被分解为三个部分:assert [left expression] == [right expression] : (optional message),断言的结果与在Java中得到的结果非常不同。如果断言为真,那么什么也不会发生。如果断言为假,那么它提供被断言表达式的每个子表达式的值的可视化表示。例如:,将会打印下面的内容:,当表达式更复杂时,权力断言变得非常有趣,就像在下一个例子中:,我们执行上面的代码后,将会输出:,如果不想要像上面那样漂亮的打印错误消息,可以通过更改断言的可选消息部分来回退到自定义错误消息,就像下面的例子:,将会输出以下错误内容:,任何语句都可以与标签相关联。标签不影响代码的语义,可用于使代码更容易阅读,如下例所示:,在上面的示例中,given,when,then ,zinyan都是属于标签。这些标签,并不会影响代码的运行结果和逻辑。,标签并没有特殊的关键字,标签名称可以随意定义。,尽管没有更改标记语句的语义,但可以在break指令中使用标签作为跳转的目标。示例如下:,默认情况下标签对代码的语义没有影响,但是它们属于抽象语法树(AST),因此AST转换可以使用该信息对代码执行转换,从而导致不同的语义。这就是Spock框架为简化测试所做的工作。,本篇内容介绍到这里就结束了,大家重点了解控制结构的相关写法和实现逻辑以及标签的基本声明方式就可以了。,对于断言和特殊的标签使用场景,可以做一个扩展知识点的学习。一般在实际工作中用到的比较少。,以上内容的知识来源于Groovy官方文档:Groovy Language Documentation (groovy-lang.org)的学习笔记。

© 版权声明

相关文章