文章目录
1、groovy 布尔
1.1、执行布尔测试
-
各种状况boolean测试
-
/** * boolean 测试 * @author liangchen* @date 2020/11/6 */ class BooleanTest { static void main(String[] args) { assert true assert !false // matcher匹配 assert ('a' =~ /./) assert !('a' =~ /b/) //集合必须非空为true assert [1] assert ![] // 迭代器必须要下一个元素才会是true Iterator iterator = [1].iterator() assert iterator iterator.next() assert !iterator // Map必须需要有元素才是true assert ['a': 1] assert ![:] // 字符串必须非空 assert 'a' assert !'' // 0是false, 非0是true assert 1 assert 1.1 assert 1.2f assert 1.3g assert 2L assert 3G assert !0 //对象等于null 是false,反之为true assert ! null assert new Object() //需要重新asBoolean方法 assert !new AlwaysFalse() } static class AlwaysFalse{ boolean asBoolean(){false} } }
1.2、在布尔赋值测试
-
如果== 设置成=会怎么样
-
/** * * 赋值符号出现在if条件中会怎么样 * @author liangchen* @date 2020/11/6 */ class AssignementBooleanTest { static void main(String[] args) { def x =1 if (x == 2) { assert false } // true if (x = 2) { println x } assert x == 2 x = 3 def store = [] while (x = x - 1) { // 把元素放入到store中 store << x } assert store == [2, 1] while (x = 2) { println x break } } }
2、条件语句结构
2.1、if语句
/**
* if语句
* @author liangchen* @date 2020/11/6
*/
class ifDmeo {
static void main(String[] args) {
if (true) assert true
else assert false
if (1) {
assert true
} else {
assert false
}
if ('nonempty') {
assert true
}else if (['x']) {
assert false
} else {
assert false
}
if (0) {
assert false
}else if ([]) {
assert false
} else {
assert true
}
}
}
2.2、三元表达式
-
可以简写
-
/** * 三元表达式 * @author liangchen* @date 2020/11/6 */ class ConditionOperatorDeom { static void main(String[] args) { // 值的类型可以不一致 def result = (1==1) ? 'ok' : 'failed' assert result == 'ok' result = 'some string' ? 10 : ['x'] assert result == 10 // 简写 def argument = 'given' def standard = 'defualt' result = argument ? argument : standard //简写 def value = argument ?: standard } }
-
2.3、switch语句
/**
* switch 语句
* @author liangchen* @date 2020/11/6
*/
class SwitchDemo {
static void main(String[] args) {
// 中规中矩switch
def a = 1
def log = ''
switch (a) {
case 0 : log += '0'
case 1: log += '1'
case 2: log += '2'
break;
default: log += 'default'
}
assert log == '12'
// groovy switch
switch (10) {
case 0 :assert false; break
case 0..9:assert false; break
// a.contains(b)
case [8,9,11]:assert false;break
// a.isInstance(b)
case Float : assert false;break
case { it % 3 == 0 } : assert false;break
// 正则表达式 a.matcher(b.toString()).matches()
case ~/../ : assert true;break
default:assert false; break
}
}
}
2.4、assert断言
-
/** * * 断言 * @author liangchen* @date 2020/11/6 */ class AssertDemo { static void main(String[] args) { def host = /\/\/([a-zA-Z0-9-])+(\.(a-zA-Z0-9-])*?)(:|\/)/ assertHost 'http://a.b.c:8080/bla', host, 'a.b.c' } static def assertHost(candidate, regex, expected) { candidate.eachMatch(regex){ assert it[1] == expected} } }
3、循环
3.1、while
-
/** * while语句 * @author liangchen* @date 2020/11/6 */ class WhileDemo { static void main(String[] args) { def list = [1,2,3] while (list) { list.remove(0) } assert list == [] while (list.size() < 3) { list << list.size() +1 } assert list == [1,2,3] } }
3.2 for
-
/** * for循环 * @author liangchen* @date 2020/11/6 */ class ForDemo { static void main(String[] args) { // for in def store = '' for (String s in 'a'..'c') store +=s assert store == 'abc' store = '' for (i in [1, 2, 3]) { store += i } assert store == '123' def myString = 'Old school Java' store = '' for (int i = 0; i < myString.size(); i++) { store += myString[i] } assert store == myString myString = 'Java range index' store = '' for (int i : 0..<myString.size()) { store +=myString[i] } assert store == myString myString='Groovy range index' store = '' for (i in 0..<myString.size()) { store += myString[i] } assert store == myString myString ='Java string Iterable' store = '' for (String s : myString) { store += s } assert store == myString myString = 'Groovy iterator' store = '' for (s in myString) { store +=s } assert store == myString } }
##4、跳出代码块和方法
4.1、正常结束语句:return/break/continue
-
/** * break continue * @author liangchen* @date 2020/11/8 */ class SimpleBreakContinueDemo { static void main(String[] args) { def a = 1 while (true) { a++ break } assert a == 2 for (i in 0..10) { if(i == 0) continue a++ if(i > 0) break } assert a == 3 } }
4.2、异常:throw/try-catch-finally
-
/** * * @author liangchen* @date 2020/11/8 */ class ExceptionDemo { static def myMethod() { throw new IllegalArgumentException() } static void main(String[] args) { def log = [] try { myMethod() } catch (Exception e) { log << e.toString() } finally{ log << 'finally' } assert log.size() == 2 try { if (Math.random() < 0.5) { 1 / 0 } else { null.hashCode() } } catch (ArithmeticException | NullPointerException exception) { println exception.class.name } }
5、总结
- 主要是if/else, switch(扩展类型) while,for