第六章、groovy的控制结构

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、总结

  1. 主要是if/else, switch(扩展类型) while,for
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值