Android Kotlin(4)之《控制流及返回跳转》

Android Kotlin第四篇,这里讲解主要还是以实际演示为主,因为我觉得实践和原理一样重要,只知道原理不会用也不行。Kotlin系列源码在源码下载这里下载。我们一起来了解下Kotlin的控制流及返回跳转,也许我有的地方没有写好,也欢迎大家提出问题,纠正问题。

一、控制流

Kotlin的控制流与java相识,不同点就是Kotlin里没有switch控制流,主要控制流有:If表达式、When表达式、For循环、While 循环。

1、If表达式

if是一个表达式,它会返回一个值。

    fun test1() : String{
        val a = 2
        val b = 1
        //传统用法
        var max = a
        if(a < b) max = b
        //else 用法
        if(a > b){
            max = a
        }else{
            max = b
        }
        //表达式
        max = if(a > b) a else b

        //if的分支可以是代码块,最后的表达式作为该块的值
        return if(a > b){
            a//这个是返回值
        }else {
            b //这个不是最后一个不作为返回值
            false//这个是返回值
        }.toString()//这个是将返回值转化成字符串
    }

你会发现,“max = if(a > b) a else b”这个是不是很像java的三元运算(条件?然后:否则),因此Kotlin这个可以替代三元运算

2、When表达式

when取代switch,Kotlin里是没有switch操作符的,用when可以替代。

    when(i){
            1 -> return "1"
            //还可以检查一系列值
            2,3 -> return "2,3"
            else -> {
                val a = "else"
                return a
            }
        }
    //你可以返回另外一个函数值,也可以用任意表达式作为分支条件
        when(i){
            tests() -> return "10"
            3 -> return test1()
            else -> {
                val a = "else"
                return a
            }
        }

Kotlin新特性:
in
(in,!in)检查一个值是否在某个区间或者集合里:

    val nums = listOf(11,12,13,14)
        when(i){
            in 1..10 -> return "在1..10"
            in nums -> return "nums"
            !in 15..20 -> return "不在15..20"
            else -> {
                val a = "else"
                return a
            }
        }

is
(is,!is)检查一个值是否特定的类型:

    fun <T> test3(x : T) : String{
        when(x){
            //能检测基本类型
            is String -> return "String"
            is Int -> return "Int"
            //还能检测自定义类类型
            is FunGoKotlin -> return "FunGoKotlin"
            //还可以嵌套使用
            is Float -> {
                when(x) {
                    in 1..10 -> return "Float:" + x
                }
            }
        }
        return "其他"
    }

3、For循环

for 循环可以对任何提供迭代器(iterator)的对象进行遍历。

    fun test4() : String{
        val nums = listOf(1,2,3,4,9,"结束")
        var temp : String = ""
        for ( i in nums){//i的类型与nums里对应位置类型一样
            temp += i
        }
        temp = temp + ","
        //只是遍历集合中某部分
        for ( i in 1..nums.size-1){//这里i就变了哦,不是nums的值,而是对应的位置
            temp += nums[i]
        }
        return temp
    }

4、While循环

while 和 do..while 照常使用。

    fun test5(a : Int):String{
        var x = a
        while (x > 0){
            x --
        }
        return x.toString()

        do {
         x--
        }while (x != -10)
        return x.toString()
    }

二、返回跳转(return,break,continue)

上面我们学习了控制流,这里当然不能缺少对循环进行控制,返回跳转:
Kotlin 有三种结构化跳转表达式:

  • return。默认从最直接包围它的函数或者匿名函数返回。
  • break。终止最直接包围它的循环。
  • continue。继续下一次最直接包围它的循环。

Kotlin 中任何表达式都可以用标签(label)来标记。
标签的格式为标识符后跟 @ 符号,例如:

   fun test6(a: Int) : String{
        abc@ for (i in 1..5){
            abcd@ for (j in 1..5){
                if(i==a && j == a){
//                    break@abcd //结束abcd本次循环,继续执行循环外的abc循环
//                    break@abc //结束abc本次循环,整个循环就结束了
//                    continue@abcd //继续下一次abcd循环
                    continue@abc //继续下一次abc循环
                }
                Log.i(TAG, i.toString()+">>>"+j.toString())
            }
        }
        return ""
    }

Kotlin标签限制的 return 允许我们从外层函数返回。 最重要的一个用途就是从 lambda 表达式中返回:

     fun test7() : String{
        val numbers : List<Int> = mutableListOf(17,12,5,67,3,10)
        return numbers.meetCons lit@{
            if(it == 5){
                return@lit false
            }else{
                true
            }
        }.toString()

         numbers.meetCons{
             if(it == 5){
                 return@meetCons false
             }else{
                 true
             }
         }.toString()

        return "test7"
    }

到此我们就结束了Kotlin控制流及返回跳转的学习,谢谢大家的观赏及支持。

全套源码下载这里源码会随着后面发布的Kotlin逐渐完善

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容