首页 > 其他分享 >Kotlin 入门教程:流程控制

Kotlin 入门教程:流程控制

时间:2024-10-16 11:46:23浏览次数:3  
标签:continue Kotlin 流程 入门教程 else break 循环 println 代码

我们有时希望程序能够根据不同的条件来决定是否执行某些代码段(条件判断),或者反复执行某段代码直到满足特定条件为止(循环),这些功能的实现方式统称为「流程控制」;本文介绍 Kotlin 的流程控制 。本文出现的所有代码均可在Kotlin 官方在线代码调试器运行,部分代码下方也会提供链接直达。

专栏《零基础入门 Kotlin》持续更新中,欢迎订阅!


目录


1. 条件判断

  • if

if 用于判断条件是否成立,若成立,则执行指定代码:

val a = 3
val b = 2
if(a>b){
    println("a 比 b 大")
}else{
    println("b 比 a 大")
}
// a 比 b 大

运行代码

上面代码中,if 后面紧跟小括号,若小括号里的条件表达式成立,则执行小括号后面大括号包裹的代码;否则执行 else 后面大括号里面的代码。

条件表达式 a>b 返回的是布尔值 true ,你也可以直接将布尔值写在条件判断里:

if(true){
    println("true")
}else{
    println("false")
}
// true

更多条件表达式可以查看 Kotlin 入门教程:运算符

如果有多个条件需要判断,可以使用 else if

val a = 2
val b = 2
if(a>b){
    println("a 比 b 大")
}else if(a == b){
    println("a 等于 b")
}else{
    println("b 比 a 大")
}
// a 等于 b

上面代码首先判断a是否大于b,如果成立,则打印"a比b大"。 如果不成立,则进入下一个判断,判断a是否等于b,如果成立,则打印"a等于b"。 如果以上两个条件都不成立,则执行else语句,打印"b比a大"

注意,else if 语句判断成功后,就不会继续往下执行:

val a = 3
if(a>3){
    println("a>3")
}else if(a>2){
    println("a>2")
}else if(a>1){
    println("a>1")// 不会执行
}else{
    println("a>0")// 不会执行
}
// a>2

运行代码

上面代码首先判断a是否大于3,如果是则打印"a>3"。但是,因为a的值为3,所以不满足条件,不执行这个分支;接着判断a是否大于2,如果是则打印"a>2"。因为a的值为3,满足条件,所以执行这个分支,打印"a>2";后面将不再继续判断,因为已经找到满足条件的分支了。最终的结果是打印"a>2"。

  • when

when 可以看作 else if 的一种简便写法:

val a = 3

if(a>3){
    println("a>3")
}else if(a>2){
    println("a>2")
}else if(a>1){
    println("a>1")// 不会执行
}else{
    println("a>0")// 不会执行
}
//等价于
when { 
	a > 3 -> println("a>3") 
	a > 2 -> println("a>2") 
	a > 1 -> println("a>1") // 不会执行
	else -> println("a>0") // 不会执行
}

运行代码

上面代码使用了 Kotlin 的 when 表达式替换 else ifwhen 后面紧跟大括号,大括号内用箭头 -> 连接条件表达式和代码块。如果代码块不止一行语句,需要用大括号包裹:

val a = 3
when { 
    a > 3 -> println("a>3")
    a > 2 -> {
        println("a<3")
        println("a>2") 
    }
    a > 1 -> println("a>1") 
    else -> println("a>0") 
}
// a<3
// a>2

when 的另一种用法和 C 语言的 switch 相似:

val obj = "Hello"    

val result = when (obj) {
    // If obj equals "1", sets result to "one"
    "1" -> "One"
    // If obj equals "Hello", sets result to "Greeting"
    "Hello" -> "Greeting"
    // Sets result to "Unknown" if no previous condition is satisfied
    else -> "Unknown"
}
println(result)
// Greeting

上面代码使用了Kotlin中的when表达式来对obj进行条件判断和匹配。当obj等于"1"时,将 result 设置为 "One"。 当obj等于"Hello"时,将result设置为"Greeting"。 当obj不匹配前面的条件时,将result设置为"Unknown"

2. 循环

在 Kotlin 中,forwhile 循环是用来重复执行一段代码直到满足某个条件为止的基本结构。

2.1 范围(range)

在 Kotlin 中,.. 是一个范围定义运算符,它用来创建一个整数范围或者是字符范围。这个运算符可以用来生成一系列连续的值,通常与 for 循环一起使用来遍历这些值。

整数范围

当你想要创建一个包含一系列连续整数的范围时,可以使用 ..。例如,创建一个从 1 到 5 的整数范围:

val range = 1..5

这个 range 对象包含了从 1 到 5 的所有整数。你可以使用 in 关键字来遍历这个范围内的每一个值:

for (i in 1..5) {
    println(i)
}
// 输出: 1 2 3 4 5

字符范围

除了整数之外,.. 运算符也可以用来创建字符范围。例如,创建一个从 ‘a’ 到 ‘e’ 的字符范围:

for (c in 'a'..'e') {
    println(c)
}
// 输出: a b c d e

步长与闭区间

默认情况下,范围是一个闭区间,即它包括了起始值和结束值。同时,可以通过 step 参数来指定步长:

for (i in 1..10 step 2) {
    println(i)
}
// 输出: 1 3 5 7 9

上面代码中,我们指定了步长为 2,因此输出的数字是从 1 开始每隔一个数字取一个值,直到 9。

另外,如果要声明一个不包括结束值的范围(range),可以使用 ..< 运算符。例如,1..<4 声明的范围的值为 1, 2, 3

要声明一个逆序的范围,请使用 downTo。例如,4 downTo 1 声明的范围的值为 4, 3, 2, 1

2.2 for

for 循环通常用来遍历一个范围或者集合中的元素。在 Kotlin 中,你可以使用 in 关键字来定义一个从开始到结束的整数范围,或者用来遍历集合(如列表)中的每个元素:

// 遍历一个数字范围
for (i in 1..5) {
    println(i)
}
// 输出: 1 2 3 4 5

// 遍历一个列表
val numbers = listOf(1, 2, 3, 4, 5)
for (number in numbers) {
    println(number)
}
// 输出: 1 2 3 4 5

2.3 while

while 循环在给定条件为真的时候重复执行一段代码。如果条件不再为真,则退出循环:

var count = 0
while (count < 5) {
    println("Count is $count")
    count++
}
// 输出: Count is 0 Count is 1 Count is 2 Count is 3 Count is 4

// do...while 循环至少会执行一次,然后检查条件
do {
    println("Count is still $count")
} while (--count > 0)
// 输出: Count is still 5 Count is still 4 ... Count is still 0

注意,在 do...while 循环中,条件是在执行完循环体之后才被检查的,因此至少会执行一次循环体内的代码。

2.4 breakcontinue

在 Kotlin 中,breakcontinue 是用来控制循环流程的关键字。它们可以在 while 或者 for 循环中使用,以改变循环的正常执行顺序。

break

break 关键字用来立即终止当前所在的循环,无论循环条件是否仍然为真。一旦执行 break,程序将会跳出循环,继续执行循环之后的代码:

var i = 0
while (i < 10) {
    if (i == 5) {
        break // 当 i 等于 5 时,跳出循环
    }
    println(i)
    i++
}
// 输出: 0 1 2 3 4

上面代码中,当变量 i 的值达到 5 时,break 语句被执行,导致循环提前终止,因此 5 并没有被打印出来。

// 创建一个数字列表
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

println("Using 'continue' to skip odd numbers:")
// 使用 continue 跳过奇数
for (number in numbers) {
    if (number % 2 != 0) {
        continue // 当前数字是奇数时跳过这次迭代
    }
    println(number)
}

println("\nUsing 'break' to exit the loop when a number is greater than 5:")
// 使用 break 在数字大于5时退出循环
for (number in numbers) {
    if (number > 5) {
        break // 当前数字大于5时结束循环
    }
    println(number)
}

运行代码
上面代码中,第一个 for 循环会打印出所有的偶数,而第二个 for 循环会在打印出任何大于5的数字之前终止。

continue

continue 关键字用来跳过当前循环体内剩余的部分,并立即开始下一次循环迭代。如果当前是最后一次迭代,则循环结束:

var i = 0
while (i < 10) {
    i++
    if (i % 2 == 0) {
        continue // 当 i 是偶数时,跳过本次循环剩余部分并开始下一次迭代
    }
    println(i)
}
// 输出: 1 3 5 7 9

上面代码中,每当 i 是偶数时,continue 语句会被执行,这会导致跳过当前循环体内的剩余代码,并进行下一次迭代。因此,只有奇数被打印了出来。

标签化(label)的 breakcontinue

一般情况下,continuebreak都只是作用于内层循环,不会影响到外层循环。如果想要在内层循环中跳出外层循环,可以使用标签化(labeled)的 breakcontinue 来控制嵌套循环。通过给循环加上一个标识符标签,可以在一个外层循环中中断或跳过内层循环:

var i = 0
outer@ while (i < 10) {
    var j = 0
    while (j < 10) {
        println("i=$i, j=$j")
        if (i == 5 && j == 5) {
            break@outer // 当 i 和 j 都为 5 时,跳出外层循环
        }
        j++
    }
    i++
}

运行代码

上面代码中,使用了 outer@ 标记外层循环。break@outer 会在满足条件时跳出标记的外层循环。


部分参考资料

  1. Control flow | Kotlin Documentation

标签:continue,Kotlin,流程,入门教程,else,break,循环,println,代码
From: https://blog.csdn.net/damlq5201314/article/details/142965722

相关文章

  • ABP VNext 系列:框架启动流程以及依赖注入原理和源码分析
    简单介绍ABPVNextGithub地址:https://github.com/abpframework/abp官网文档地址:https://abp.io/docs/latest官网:https://abp.io/ABPVNext框架是一个基于ASP.NETCore的完整基础架构,也就是我们现在称的ABP框架,它遵循软件开发最佳实践和最新技术来创建现代Web应用程......
  • DC9靶机渗透全流程
    DC-9√192.168.40.169参考:https://blog.csdn.net/xiaocainiao2017/article/details/110749596https://www.cnblogs.com/Bitores/p/14759425.html1.nmapnmap-sP192.168.40.148/24nmap-A192.168.40.169-p0-65535照样还是22/ssh服务,80/http服务2.dirsearch扫目......
  • 专利申请的流程是怎样的?需经哪几个阶段?最快多长时间能获得通过?
    发明专利的主要流程:受理、初步审查、专利公布(申请日起18个月)、提出实质审查请求(申请日起3年内)、实质审查、授权或驳回。通常审查周期:1~2年(从实质审查开始到结束)其他程序:提前公开优先审查(部分技术领域)--1年快速预审(部分地区及技术领域)-2、3个月实用新型与外观设计的主要......
  • 全链路营销|基于事件驱动的流程编排系统 策略中心系统
    全链路营销|基于事件驱动的流程编排系统https://mp.weixin.qq.com/s/RHXyGaGyp_CK7FJPDqS3Cg全链路营销|基于事件驱动的流程编排系统原创 西赞 阿里云开发者 2024年10月14日08:30 浙江  阿里妹导读 本文主要介绍了AE策略中心的技术方案选型与落地实战。 项目......
  • 应急响应处置流程Windows篇
    一、服务流程沟通确认安全事件在与客户第一次沟通时,应及时提醒客户对受害机器及时进行断网隔离操作。已知的安全事件包括但不限于如下:1. 恶意代码威胁,即僵尸网络、恶意木马、蠕虫病毒、勒索病毒等恶意代码导致的安全事件2. 高级持续性威胁(APT)攻击事件,即具有潜伏性、隐......
  • 一张图带你了解.NET终结(Finalize)流程 ----续
    接上文https://www.cnblogs.com/lmy5215006/p/18456380评论区精彩,大佬深入讨论了C#的Finalize最佳实践,感觉有必要整理下来,拓展阅读,开拓眼界。GC类中几个非常重要的APIGC.ReRegisterForFinalize顾名思义,再次注册一个已经注册过的可终结对象。其底层实现逻辑与常规的终结注册......
  • cvpr注意事项和注册流程(2025版)(20241015更新还未开放注册)
    本文章基于现有网上没有cvpr详细版本的一步一步的注册流程进行编写,用于指导自己和方便他人进行注册。接下来将从CVPR2025的重要节点、变更事项、注册流程进行说明重要节点CVPR2025变更的重要事项Duetothedramaticincreaseinthenumberofsubmissionsandthedeterio......
  • 2024软著申请详细流程分享
    软著申请全攻略:轻松掌握网上办理流程软著申请具有诸多优势,相较于专利申请更为简便,申请周期较短,且无需每年缴纳年费,对于计算机领域从业者和程序员而言是极为合适的选择。当前,软著申请既可以自行办理登记,也能够委托专业代理机构进行办理登记。其大体流程涵盖以下步骤:账号注......
  • 可视化流程图的UI设计展示参考
              ......
  • 为什么https安全?工作流程解释
    一客户端向服务器发送请求二服务器收到请求后,发送一个证书(该证书是受到第三方权威机构认证的)和服务器的公钥给客户端,客户端收到证书后,对证书进行验证三如果验证成功,客户端会随机生成一个会话密钥,并用服务器刚刚发过来的公钥进行加密该会话密钥,然后将会话密钥发送给服务器四......