zoukankan      html  css  js  c++  java
  • 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();

          

        }

     

    }

  • 相关阅读:
    web接口调用
    UISegmentedControl
    CocoaPods安装和使用教程
    NSTimeInterval
    OC-NSString从文件中读取字符串
    XMPP(mac)方案二 ejabberd 服务器搭建 (转载)
    监听 IOS响应式编程框架ReactiveCocoa(RAC)使用示例(转载)
    iOS开发-文件管理
    OC中NSString 的常用方法 (转载)
    NSAttributedString
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/5719188.html
Copyright © 2011-2022 走看看