Kotlin语法快速入门--条件控制和循环语句(2)

embedded/2024/9/24 17:31:46/

Kotlin语法入门–条件控制和循环语句(2)

文章目录

  • Kotlin语法入门--条件控制和循环语句(2)
    • 二、条件控制和循环语句
      • 1、if...else
      • 2、when
        • 2.1、常规用法
        • 2.2、特殊用法--并列:
        • 2.3、特殊用法--类型判断:
        • 2.4、特殊用法--区间:
        • 2.5、返回值
      • 3、循环
        • 3.1、for..in
        • 3.2、forEach
        • 3.3、迭代器
        • 3.4、【扩展】for..in中的withIndex方法
        • 3.5、【扩展】forEachIndexed()方法
        • 3.6、do...while和while
      • 4、return,break,continue结束语句的使用
        • 4.1、结束循环分支
        • 4.2、标签备注代码块--@
        • 4.3、forEach退出循环的几种方式

二、条件控制和循环语句

1、if…else

常规分支:

kotlin">fun main() {var a = 1if (a == 1) {println("a is 1")} else {println("a is not 1")}
}

kotlin新特性:if语句可以有返回值

kotlin">fun main() {var a = 1val b = if (a == 1) {3} else {4}println(b)
}

像上述这种,假如条件成立,则赋值给a,返回值不用return 即可返回。

但是,注意的是假如要有返回值,则必须要写else分支。

image-20240417153651819

多分支已是如此:

kotlin">fun main() {var a = 1val b = if (a == 1) {3} else if(a==3)  {4}else{5}println(b)
}

由于kotlin没有三元表达式,所以,可以使用if及其分支拟造一个三元表达式:

kotlin">fun main() {var a = 1var b = 2val c = if (a == b) true else falseprintln(c)
}

2、when

2.1、常规用法

关于when的用法,可以对标Java中的Switch,示例代码如下:

kotlin">fun main() {var a = 1when (a) {1 -> println("a is 1")2 -> println("a is 2")else -> println("a is null")}}

其中,else是默认输出语句,对标Java中的default

2.2、特殊用法–并列:
kotlin">fun main() {var a = 1when (a) {1,3 -> println("a is 1")  //1或32 -> println("a is 2")else -> println("a is null")}
}
2.3、特殊用法–类型判断:
kotlin">fun main() {var a: Any = 1when (a) {is Int -> println("a is Int")is String -> println("a is String")else -> println("a is else")}
}
2.4、特殊用法–区间:
kotlin">fun main() {var a: Any = 1when (a) {in 1..10 -> println("a is in range")is String -> println("a is a String")else -> println("none of the above")}
}

值得注意的是,每当判断到成立条件的时候,下面的条件不管成立否都不会执行。

还有,多个条件可以并列写,例如:

kotlin">fun main() {var a: Any = 11when (a) {in 1..10,is Int -> println("a is in range or is Int")else -> println("none of the above")}
}
2.5、返回值

与if一样,kotlin的when也可以带上返回值,将返回值写在执行的最后一样即可:

kotlin">fun main() {var a: Any = 11val b = when (a) {in 1..10 -> {println("a is in range")1}is Int -> {println("a is a Int")2}else -> {println("none of the above")3}}println(b)
}

3、循环

3.1、for…in
kotlin">fun main() {var list = (1..<20).toList()for (i in list) {println(i)}
}
3.2、forEach

下述的forEach其实就是对原有的方法进行扩展,

kotlin">fun main() {var list = (1..<20).toList()list.forEach {println(it)}
}

其循环默认名字是it,也可以用自定义的名字,例如下面value->:

kotlin">fun main() {var list = ('a'..<'z').toList()list.forEach {value->println(value)}
}

其实其底层也就是一个lamda表达式进行赋值,然后进行for循环:

image-20240417164415857

3.3、迭代器

先看迭代器的方法:

image-20240417162941465

next():获取下一个元素的值,就像有一个指针,指向下一个值,并获取。

hasnext():判断是否存在下一个值,并且返回boolean值。

kotlin">fun main() {var list = (1..<20).toList()var iterator = list.listIterator()while (iterator.hasNext()) {println(iterator.next())}
}
3.4、【扩展】for…in中的withIndex方法

image-20240417163753785

从上图可以看到,withIndex()方法要返回一个迭代器,其会返回一个对象,有下标index,和值i,可以通过kotlin的一个解构的方法获取:

kotlin">fun main() {var list = ('a'..<'z').toList()for ((index,i)in list.withIndex()) {println("$index $i")}
}

输出:

image-20240417164130364

3.5、【扩展】forEachIndexed()方法
kotlin">fun main() {var list = ('a'..<'z').toList()list.forEachIndexed{index, value->println("$index $value")}
}

forEachIndexed()方法:

image-20240417165201802

3.6、do…while和while

这两个语法没有变化,与常见语言的格式一样。

do…while:

kotlin">fun main() {var i = 1do {println("$i")} while (i++ < 6)
}a

while:

kotlin">fun main() {var i = 1while (i++ < 6) {println("$i")}
}

4、return,break,continue结束语句的使用

4.1、结束循环分支

例如:

kotlin">fun main() {for (i in 1..10)for (j in 1..10) {if (i == 5 && j == 5) {break  //或者continue}println("$i $j ")}
}

解释:首先,break或者continue会优先执行的语句段是距离关键字(break或者continue)最近的循环关键字,所以上述代码中break的是j所在的for。

4.2、标签备注代码块–@
kotlin">fun main() {a@for (i in 1..10)for (j in 1..10) {if (i == 5 && j == 5) {break@a //或者continue}println("$i $j ")}
}

像这段,就可以指定a@…@a这段代码区域执行break或者continue。

4.3、forEach退出循环的几种方式
kotlin">fun main() {(1..<10).forEach {if (it == 5) {// 执行跳出循环                  }println(it)}
}

就像上述代码,想在it == 5的时候执行跳出循环 ,但是这个时候无法直接跳出循环,因为其底层是使用lamda表达式和函数实现的,即无法使用关键字break,continue。而使用return语句则会直接返回main函数,所以有下面几种写法:

  1. 寻找最近forEach,这样就不会打印5这个数字,就像continue一样。

    kotlin">fun main() {(1..<10).forEach {if (it == 5) {return@forEach // 执行跳过本次循环}println(it)}
    }
    
  2. a@…@a方式与return@forEach一样,跳过本次循环。

    kotlin">fun main() {(1..<10).forEach  a@{if (it == 5) {return@a // 执行跳过本次循环}println(it)}
    }
    
  3. run函数结束循环,类似于return函数那种感觉。

    kotlin">fun main() {run {(1..<10).forEach{if (it == 5) {return@run// 执行结束循环(run函数内的结束)}println(it)}}
    }
    
  4. 同理上述方法可以写成

    kotlin">fun main() {run a@ {(1..<10).forEach{if (it == 5) {return@a // 执行结束循环}println(it)}}
    }
    

http://www.ppmy.cn/embedded/9287.html

相关文章

设计模式在芯片验证中的应用——策略

1. 策略模式 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 在RTL设计中可能包含了复杂的多个访问仲裁逻辑&#xff0c;使用了多种算法来确定访问内存优先级顺序&am…

2024年04月18日优雅草便民tools开源-git以及dcloud同步-长期更新

优雅草小工具-数据来自优雅草api赋能 优雅草小工具-数据来自优雅草api赋能-优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益工具&#xff0c;2024年1月17日正式发布v1.0.0版本&#xff0c;本工具为了方便大众免费使用&#xff0c;本生活小工具会陆续加入…

JMeter--后置处理器--JSON提取器(JSON Extractor)

数据关联&#xff0c;可以通过JsonPath提取所需要的值&#xff0c;功能非常强大&#xff08;注意取样器返回必须为 Json&#xff09;&#xff1b;底层采用jackson实现&#xff1b; 右键 >>> 添加 >>> 后置处理器 >>> JSON提取器&#xff08;JSON E…

【MySQL 数据宝典】【内存结构】- 003 Change Buffer 详解

一、 Change Buffer基本概念 Change Buffer&#xff1a;写缓冲区,是针对二级索引(辅助索引) 页的更新优化措施。 作用: 在进行DML操作时&#xff0c;如果请求的是 辅助索引&#xff08;非唯一键索引&#xff09;没有在缓冲池 中时&#xff0c;并不会立刻将磁盘页加载到缓冲池…

DIY mybatisPlus的分页插件

目录 起因修改定义接口重写MyPage的方法 实践测试 起因 在我们通过list返回的列表页&#xff0c;出现了一个需要数据合计的需求&#xff0c;例如一个订单1块钱&#xff0c;那么所有订单加起来多少钱&#xff0c;那么list一般都通过分页返回&#xff0c;而统计所有订单又不能只…

进程间通信

目录 进程间通信介绍 目的&#xff1a; 本质&#xff1a; 原则&#xff1a; ​编辑 IPC分类; 管道&#xff1a; System V IPC: POSIX IPC&#xff1a; 管道 什么是管道&#xff1a; 匿名管道&#xff1a; 管道的四种情况&#xff1a; 管道的特点&#xff1a; 命名管道&#xff…

【linux】软件工具安装 + vim 和 gcc 使用(上)

目录 1. linux 安装软件途径 2. rzsz 命令 3. vim 和 gcc 使用 a. vim的基本概念 b. 命令模式下的指令 c. 底行模式下的指令 1. linux 安装软件途径 源代码安装rpm安装 -- linux安装包yum安装&#xff08;最好&#xff0c;可以解决安装源&#xff0c;安装版本&#xff0…

视频质量评价 FISM 算法详细介绍

FISM FSIM(Feature Similarity Index)是一种全参考图像质量评估(IQA)方法,它基于人类视觉系统(HVS)的特性,利用图像的底层特征来评估图像质量。 FSIM算法来自2011年一篇高引用论文{ FSIM: A Feature SIMilarity Index for Image Quality Assessment };SSIM算法一经提…