13.控制结构

1       控制结构

1.1  assert,在Groovy 中叫做Groovy truth

只有断言Boolean与java相同。

空集合或者null是false。0断言为false,其他数字断言为true。


package assert1

class AssertTest {

static main(args) {

//空集合或null断言为false

def map = [:];

assert !map;

def test = null;

assert !test;

def list = ["Ubuntu","Android"];

assert list;

//0断言为false,其他数字断言为true。

assert !0;

assert 1;

assert -1;

assert "Hello";

}

}

assert,在Groovy 中叫做Groovy truth。

1.2  if 语句块

支持if and switch 语句,if语句支持断言,例如,在if中,你使用list作为参数,断言该list。

1.3  switch 语句块和isCase方法

switch语句非常灵活,任何实现了 isCase 方法的类型都能被使用。groovy提供了一个 isCase 方法,使用isInstance的实现:

如果是对象object,使用equals;

如果是Collections,使用contains;

如果是正则表达式,使用matches。

你也能指定一个闭包,来校验一个Boolean值。


package structure

class SwitchTest {

def testingSwitch(input) {

def result

switch (input) {

case 51://对象

result = ‘Object equals‘

break

case ~/^Regular.*matching/://正则表达式

result = ‘Pattern match‘

break

case 10..50://区间

result = ‘Range contains‘

break

case ["Ubuntu", ‘Android‘, 5, 9.12]://集合

result = ‘List contains‘

break

case { it instanceof Integer && it < 50 }://闭包

result = ‘Closure boolean‘

break

case String://String

result = ‘Class isInstance‘

break

default:

result = ‘Default‘

break

}

result;

}

def test() {

assert ‘Object equals‘ == testingSwitch(51)

assert ‘Pattern match‘ == testingSwitch("Regular pattern matching")

assert ‘Range contains‘ == testingSwitch(13)

assert ‘List contains‘ == testingSwitch(‘Ubuntu‘)

assert ‘Closure boolean‘ == testingSwitch(9)

assert ‘Class isInstance‘ == testingSwitch(‘This is an instance of String‘)

assert ‘Default‘ == testingSwitch(200)

}

static main(args) {

SwitchTest t = new SwitchTest();

t.test();

}

}

如果有多个条件都适合,则第一个case 块被处理。

如果想在switch语句块中,使用自定义的class,只需要实现isCase 方法即可。

1.4  ?.空值处理

当你访问一个对象的某个属性的时候,如果该属性为空值,则会抛出NullPointerException 异常。解决方法:使用?.


package structure

class NullOperator {

def firstName;

static main(args) {

NullOperator obj = null;

def firstName = obj.firstName;

println firstName;

}

}

输出


Caught: java.lang.NullPointerException

java.lang.NullPointerException

at structure.NullOperator.main(NullOperator.groovy:7)


package structure

class NullOperator {

def firstName;

static main(args) {

NullOperator obj = null;//(1)

def firstName = obj?.firstName;

println firstName;

}

}

输出


null

如果将上例(1)处,改成NullOperator obj = new NullOperator(firstName:"左运松");

则输出:左运松

1.5  ?:操作符

?:是很短的java的三元操作符。如果一个表达式的结果是false或者null时,使用它来设置一个默认值。


package structure

class ThreeOperator {

static main(args) {

//如果一个对象存在,则返回它;否则,新建一个对象并返回。

//for groovy

String test = null;

String result2 = test?:new String();

//for java

String result3 = (test!=null)?test:new String();

}

}

时间: 2024-10-09 07:27:32

13.控制结构的相关文章

python 各模块

01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支持模块 12 _ _builtin_ _ 模块 121 使用元组或字典中的参数调用函数 1211 Example 1-1 使用 apply 函数 1212 Example 1-2 使用 apply 函数传递关键字参数 1213 Example 1-3 使用 apply 函数调用基类的构造函数 122

转:Python标准库(非常经典的各种模块介绍)

Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我们 核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块

python学习:程序控制结构·作业20141219

Python学习:程序控制结构 20141219 编程环境: windows 7 x64 python 2.7.6 题目: 1 编写程序,完成下列题目(1分) 题目内容: 如果列出10以内自然数中3或5的倍数,则包括3,5,6,9.那么这些数字的和为23.要求计算得出任意正整数n以内中3或5的倍数的自然数之和. 输入格式: 一个正整数n. 输出格式: n以内中3或5的倍数的自然数之和. 输入样例: 10 输出样例: 23 时间限制:500ms内存限制:32000kb n = int(raw_in

C语言控制结构

C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某一段代码. 二.选择结构-if (一)if简单使用 1) 第一种结构: a) 如果条件为真,就执行后面的语句,否则不执行. if(条件) { 语句1: 语句2: ···· } 2) 第二种结构: a) 如果条件成立就执行语句1,否则执行语句2. if(条件) { 语句1: } else { 语句2:

Scala学习(二)--- 控制结构和函数

控制结构和函数 摘要: 本篇主要学习在Scala中使用条件表达式.循环和函数,你会看到Scala和其他编程语言之间一个根本性的差异.在Java或C++中,我们把表达式(比如3+4)和语句(比如if语句)看做两样不同的东西.表达式有值,而语句执行动作.在Scala中,几乎所有构造出来的语法结构都有值.这个特性使得程序更加精简,也更易读.本篇的要点包括: 1. 表达式有值 2. 块也有值,是它最后一个表达式的值 3. Scala的for循环就像是"增强版"的Java for循环 4. 分号

【Java 基础篇】【第三课】表达式、控制结构

这两天再看敏捷开发流程,我这个算是敏捷博客吗? 哈哈o(∩_∩)o 1 package a.b; 2 3 public class Three 4 { 5 static void Expression() 6 { 7 System.out.println("一.学习基本的表达式"); 8 9 // 数学表达式 10 System.out.println( 1 + 2 ); //加法 11 System.out.println( 4 - 3.2 ); //减法 12 System.out

Perl语言学习笔记 10 其他控制结构

1.unless控制结构 条件为假时执行,与if相反 可以附带else 2.Until控制结构 条件为假时执行,一直执行到条件为真: 3.条件修饰词 效果等同于: 类似的模式: 4.裸块控制结构 { body; body; .... } 有利于为临时变量圈定有效范围 5.elsif子句 6.自增.自减 同c语言 7.for 用法同c语言 8.for与foreach 在perl中,两者等价,优先选择纯正的foreach 9.5种循环块:for.foreach.while.until.裸块 last

Python程序控制结构---第三天笔记

类:数据+方法 变量名没有类型 对象才有类型 类型一旦确定,其可做的操作取决于此类型所支持的方法 . 号运算符 可调用属性:数据 返回一个数据,显示需要使用print语句 可调用方法:操作() 调用:执行一段代码 可调用对象:callable() 这么理解吧~~~ In [61]: def printName(): ....:     print 'hello' ....: In [62]: callable(printName) Out[62]: True In [63]: callable(

第13章 模版方法模式(Template Method)

原文  第13章 模版方法模式(Template Method) 模板模式 模板模式 举例:模拟下数据库的update方法,先删除在插入. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47     abstract class SqlManage     {         publi