Kotlin语法基础篇(三)

Kotlin语法基础篇(三)

相关链接:

github

Kotlin语法基础篇(二)
Kotlin语法基础篇(四)

逻辑控制语句、关键词:ifforwhiledo…whilewhen和相关的breakcontinuereturn

一、if

相比于Java中的if语句,在Kotlin中具有更为便捷高效的用法,示例

 //1、常规
        if (a>0){
            print("It's OK")
        }else{
            print("very bad")
        }
        //2、作为三目运算 Java中类似a>0?"":""的三目运算在Kotlin中用if else代替
        str= if (a>0) "OK" else "not OK"
        //3、条件代码块,可以理解为加强版的 上一个 表达式,可以类似后面提到的when表达式
        str = if (a<9){
            "咋么小于9"
        }else if (a>10){
            "感觉条件不充足,不管了,反正有兜底的"
        }
        else{
            "我是兜底的"
        }

二、for语句

Java中略有不同,没有了(i;i<x;i++)这类表达,更多的是forEach形式的,基于自身索引index

fun testFor() {
        //1、常规自增、自减
//        for (i in 0 until 10){//左闭右开[0,10)
//            println(i)
//        }
//        for (i in 0..10) {//取值[0,10],自增的渐变写法,类似until但是取值范围不同
//            println(i)
//        }
//        for (i in 10 downTo 0) {//左右都包含[10,0]
//            println(i)
//        }

        for (i in 0 until 10 step 2) {//指定每次循环跳跃的步幅,在until,.. downTo都可以用
            println(i)
        }
    }

    fun testFor2() {
        //基于索引,遍历操作
        //1、字符串索引
//        for (i in "abdesdlagjwe"){
//            println(i)
//        }

        //2、数组遍历
        val arr = arrayOf(2, 0, "3", 'c', true)
//        for (i in arr){
//            println(i)
//        }
        //3、数组自身属性遍历
//        for (i in arr.indices){//其中indices是IntRange类型,i就是索引
//            println(arr[i])
//        }
        //4、withValue数组遍历
//        for ((index,value) in arr.withIndex()){//这个算是kotlin的高级语法操作,很多业务场景中方便实用
//            println("$index , $value")
//        }
        //todo 这里就啰嗦一句了,学习更多的是靠自己主动探索,类似上面的,遇到一个新的类,就点进去看原码,看看函数调用,试试,就会学到一些
        //数组自身的迭代器
        val iterator = arr.iterator()
//        while (iterator.hasNext()) {
//            println(iterator.next())
//        }
        //forEach函数,lambad表达式,默认参数形参为it,可以自定义如:iterator.forEach{xp->println(xp)}
        iterator.forEach {
            println(it)
        }
    }

三、when

when类似于Java中的switch…case语句


    fun testWhen() {
        //Kotlin中没有了swith。。case,改用when,真心觉得更强大
        //1、替代switch...case
        val index = 3
        when (index) {
            1 -> {
                println("不对")
            }
            2 -> println("差一点")//只有一行,其实不用花括号
            3 -> {
                println("OK")
            }
            else -> {
                println("nothing")
            }
        }

        //2、多重合并的case
        when (index) {
            1, 2, 4, 5 -> {
                println("不对")
            }
            0, -1, -3 -> println("差一点")//只有一行,其实不用花括号
            3 -> {
                println("OK")
            }
            else -> {
                println("nothing")
            }
        }
        //3、突破局限,条件语句可任意,这里就相当于if了
        when (a > 0) {
            false -> {
                println("不对")
            }
            true -> {
                println("OK")
            }
            else -> println()//这里可以省略掉了,因为true和false必然走一个
        }
        //4、case条件突破常规
        var any: Any? = null
        when (any) {
            in 0..7 -> println("index 在0~7之间,index是$index")
            is Int -> println("index$index 是Int类型")
            !is String -> println("咋可能不是Int")
            any as Int !in -1..9 -> println("凑数呢?,仅仅演示when的强大case用")//这里前面加个as 转换类型,不然语句!in 编译报错
            else -> {
                println("Nothing 吧")
            }
        }
        //5、无表达式when,类似于if了,在when中,else代码块,放在最后,兜底用的
        when {
            true ->
                println("www")
            false -> println()
            else -> {
                println("nnn")
            }
        }
    }

四、whiledo…while

这两个循环语句,在多数的编程语言中用法大多是一致的

fun testWhile() {
        //while 与 do while 用法在好多编程语言中,都是类似的
        while (a > 3) {
            a--
            println(a)
        }
        do {
            println("hhh")
        } while (a > 2)
    }

五、breakreturncontinue

在多数的编程语言中,这三个关键词的作用也大致相同

fun testBRC(){
        //break,return continue

 //1、return 返回最近一层的函数,或匿名函数
        var str = ""
        //不同于java,kotlin中函数内可以定义函数
        fun aa(){
            if (str.isEmpty()){
                println("str empty")
                return//这里就return出aa函数了,后续文章会讲解@label用法
            }
        }
        aa()//调用aa函数,

        //2、终止最近的一层循环
        for (i in 0..5){
            println("i 是啥$i")
            if (i==2){
                print("=2时候出去了")
                break//=2的时候循环终止,到不了5
            }
        }

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

推荐阅读更多精彩内容