kotlin学习day8:表达式和ranges

先创建一个简单的集合,方便我们进行演示

val mList = listOf(1, 2, 3, 4)

1.if表达式

Kotlin中一切都是表达式,也就是说一切都可以返回一个值。首先if语句我们可以像Java中那样使用它:

    if (condition) {
        //do something
    } else if (condition) {
        //do something
    } else {
        //do something
    }

其次,我们也可以把结果赋值给一个变量:

var z = if(condition) x else y

所以 if 表达式总是返回一个value。如果一个分支返回了Unit,那整个表达式也将
返回Unit,它是可以被忽略的,这种情况下它的用法也就跟一般Java中的 if 条件
一样了。

//if条件表达式
    mList.forEach {
    if (it > 2)
        Log.i(TAG, it.toString()) else toast(it.toString())
    }

运行结果:

09-10 20:02:57.272 31586-31586/com.example.lbjfan.kotlindemo I/LBJFAN: 3
09-10 20:02:57.273 31586-31586/com.example.lbjfan.kotlindemo I/LBJFAN: 4

2.When表达式

when表达式类似于Java中的switch/case语句,但是更加强大,该表达式会试图去匹配所有可能的分支,然后找到满意的一个语句,执行右边的表达式。与Java中的表达式不同的是他可以匹配任意类型的参数,并且分支也可以是一个条件。我们也可以增加一个else语句,当没有任何语句匹配时,该语句会执行!

//When条件表达式:简单的匹配Int类型
      mList.forEachIndexed { index, value ->
            when (value) {
                //执行最先匹配的一条语句
                //is Int -> Log("Value is Int")
                1, 2 -> Log.i(TAG, "index:$index--value:$value")
                3 -> Log.i(TAG, "value:$value--value:$index")
                else -> {
                    Log.i(TAG, "else value:$value--value:$index")
                }
            }
        }

运行结果:

09-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index:0--value:1
09-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index:1--value:2
09-10 20:11:40.148 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: value:3--value:2
09-10 20:11:40.149 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: else value:4--value:3
//when条件表达式任意类型,且判断条件是一个表达式
        val mViewList = listOf(TextView(this), Button(this), ImageView(this))
        mViewList.forEachIndexed { index, view ->
            when (view) {
            //执行完条件语句会自动转型,不用像Java做类型转换
                is TextView -> Log("index$index:is TextView")
                is Button -> Log("index$index:is Button")
                is ImageView -> Log("index$index:is ImageView")
                else -> {
                    Log(" is Other View")
                }
            }
        }

运行结果:

09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index0:is TextView
09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index1:is TextView
09-10 20:11:40.157 8634-8634/com.example.lbjfan.kotlindemo I/LBJFAN: index2:is ImageView

3.for循环

虽然Kotlin中有很多功能强大的操作集合的函数操作符,但是如果去查看源码的话,不难发现,全都是基于最简单的迭代!

    //直接获取item
    for (value in mList) {
        Log("value:$value")
    }

运行结果:

09-10 20:25:39.620 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:1
09-10 20:25:39.620 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:2
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:3
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: value:4
//使用index获取item
    for (index in 0..mList.size - 1) {
        Log("index:$index--value:${mList.get(index)}")
    }

运行结果:

09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:0--value:1
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:1--value:2
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:2--value:3
09-10 20:25:39.621 21866-21866/com.example.lbjfan.kotlindemo I/LBJFAN: index:3--value:4

4.While和do/while循环

Kotlin中的While和do/while语句和Java中的一样

while语句:

//While语句
var x = 6
while (x > 0) {
    Log("x:$x")
    x--
}

运行结果:

09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:6
09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:5
09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:4
09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:3
09-10 20:31:45.286 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:2
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: x:1

do/while语句:

//do/while语句
var y = 6
do {
    Log("y:$y")
    y--  
} while (y > 0)

运行结果:

09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:6
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:5
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:4
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:3
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:2
09-10 20:31:45.287 27231-27231/com.example.lbjfan.kotlindemo I/LBJFAN: y:1

5.Ranges

range表达式使用..操作符,他是被定义实现了一个rangTo方法,可以帮助我们使用很多富有创造性的方式去简化我们的代码:例如:

    if (x >= 0 && x <= 10) {
        Log("x:$x")
    }

等价于:

    if (x in 0..10) {
        Log("x:$x")
    }

Range 被定义为可以被比较的任意类型,但是对于数字类型,比较器会通过转换
它为简单的类似Java代码来避免额外开销的方式来优化它。数字类型的 ranges 也
可以被迭代,编译器会转换它们为与Java中使用index的for循环的相同字节码的方
式来进行优化。

range默认自增长,因此下面的代码不会做任何事情

    if (x in 10..0) {
        Log("x:$x")
    }

对应的,要想使上面语句执行,我们可以使用downTo函数

    if (x in 10 downTo 0) {
        Log("x:$x")
    }

运行结果:

09-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 3
09-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 2
09-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 1
09-10 20:48:43.353 11479-11479/com.example.lbjfan.kotlindemo I/LBJFAN: 0

我们也可以在range中使用step来定义一个到一个值的不同的空隙

    for (it in 1..4 step 3) {
        Log(it.toString())
    }

运行结果:

09-10 20:52:44.699 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 1
09-10 20:52:44.699 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 4
    for (it in 4 downTo 1 step 2) {
        Log(it.toString())
    }

运行结果:

09-10 20:52:44.700 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 4
09-10 20:52:44.700 15648-15648/com.example.lbjfan.kotlindemo I/LBJFAN: 2

6.until函数

与range表达式不同的是until遍历时会跳过最后一个值:

 for (it in 1 until 4) {
        Log(it.toString())
    }

运行结果:

09-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 1
09-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 2
09-10 20:58:22.463 21094-21094/com.example.lbjfan.kotlindemo I/LBJFAN: 3

如果不使用until函数,我们使用index遍历数组时:

    //使用index获取item
    for (index in 0..mList.size - 1) {
        Log("index:$index--value:${mList.get(index)}")
    }

使用until函数

 for (index in 0 until mList.size) {
        Log("index:$index--value:${mList.get(index)}")
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值