User-Profile-Image
hankin
  • 5
  • Java
  • Kotlin
  • Spring
  • Web
  • SQL
  • MegaData
  • More
  • Experience
  • Enamiĝu al vi
  • 分类
    • Zuul
    • Zookeeper
    • XML
    • WebSocket
    • Web Notes
    • Web
    • Vue
    • Thymeleaf
    • SQL Server
    • SQL Notes
    • SQL
    • SpringSecurity
    • SpringMVC
    • SpringJPA
    • SpringCloud
    • SpringBoot
    • Spring Notes
    • Spring
    • Servlet
    • Ribbon
    • Redis
    • RabbitMQ
    • Python
    • PostgreSQL
    • OAuth2
    • NOSQL
    • Netty
    • MySQL
    • MyBatis
    • More
    • MinIO
    • MegaData
    • Maven
    • LoadBalancer
    • Kotlin Notes
    • Kotlin
    • Kafka
    • jQuery
    • JavaScript
    • Java Notes
    • Java
    • Hystrix
    • Git
    • Gateway
    • Freemarker
    • Feign
    • Eureka
    • ElasticSearch
    • Docker
    • Consul
    • Ajax
    • ActiveMQ
  • 页面
    • 归档
    • 摘要
    • 杂图
    • 问题随笔
  • 友链
    • Spring Cloud Alibaba
    • Spring Cloud Alibaba - 指南
    • Spring Cloud
    • Nacos
    • Docker
    • ElasticSearch
    • Kotlin中文版
    • Kotlin易百
    • KotlinWeb3
    • KotlinNhooo
    • 前端开源搜索
    • Ktorm ORM
    • Ktorm-KSP
    • Ebean ORM
    • Maven
    • 江南一点雨
    • 江南国际站
    • 设计模式
    • 熊猫大佬
    • java学习
    • kotlin函数查询
    • Istio 服务网格
    • istio
    • Ktor 异步 Web 框架
    • PostGis
    • kuangstudy
    • 源码地图
    • it教程吧
    • Arthas-JVM调优
    • Electron
    • bugstack虫洞栈
    • github大佬宝典
    • Sa-Token
    • 前端技术胖
    • bennyhuo-Kt大佬
    • Rickiyang博客
    • 李大辉大佬博客
    • KOIN
    • SQLDelight
    • Exposed-Kt-ORM
    • Javalin—Web 框架
    • http4k—HTTP包
    • 爱威尔大佬
    • 小土豆
    • 小胖哥安全框架
    • 负雪明烛刷题
    • Kotlin-FP-Arrow
    • Lua参考手册
    • 美团文章
    • Java 全栈知识体系
    • 尼恩架构师学习
    • 现代 JavaScript 教程
    • GO相关文档
    • Go学习导航
    • GoCN社区
    • GO极客兔兔-案例
    • 讯飞星火GPT
    • Hollis博客
    • PostgreSQL德哥
    • 优质博客推荐
    • 半兽人大佬
    • 系列教程
    • PostgreSQL文章
    • 云原生资料库
    • 并发博客大佬
Help?

Please contact us on our email for need any support

Support
    首页   ›   Kotlin   ›   Kotlin Notes   ›   正文
Kotlin Notes

Kotlin-表达式—分支表达式(十二)

2021-01-13 23:56:05
888  0 0
参考目录 隐藏
1) if 表达式
2) 传统if语句的语法
3) Kotlin if-else表达式
4) Kotlin if-else if-else阶梯表达式
5) Kotlin嵌套if表达式
6) Kotlin 条件 if…in
7) when 表达式
8) 使用when作为表达式
9) 使用没有表达的when语句
10) when使用大括号的多重声明
11) when 多个分支
12) 在范围内使用when
13) 任意表达式作分支条件
14) 检测一个特定类型的值
15) 取代 if-else if链
16) try…catch 表达式

阅读完需:约 4 分钟

if 表达式

在Kotlin中,if表达式返回一个值。它用于控制程序结构的流程。 在Kotlin中有各种类型的if表达式。

  • if-else表达式
  • if-else if-else阶梯表达式
  • 嵌套if表达式

传统if语句的语法

if(condation){  
    //code statement  
}

传统if else语句的语法 –

if(condation){  
    //code statement  
}  
else{  
    //code statement  
}

Kotlin if-else表达式

fun main(args: Array<String>) {  
        val num1 = 10  
        val num2 =20  
        val result = if (num1 > num2) {  
            "$num1 is greater than $num2"  
        } else {  
            "$num1 is smaller than $num2"  
        }  
        println(result)  
}

可以通过只在一个语句中写表达式来删除if-else主体的花括号。

fun main(args: Array<String>) {  
        val num1 = 10  
        val num2 =20  
        val result = if (num1 > num2) "$num1 is greater than $num2" else "$num1 is smaller than $num2"  
        println(result)  
}

在单行语句中使用if-else表达式就像Java中的三元运算符一样。 Kotlin不支持任何三元运算符。

Kotlin if-else if-else阶梯表达式

fun main(args: Array<String>) {  
    val num = 10  
    val result = if (num > 0){  
        "$num is positive"  
    }else if(num < 0){  
        "$num is negative"  
    }else{  
        "$num is zero"  
    }  
    println(result)  
}

Kotlin嵌套if表达式

fun main(args: Array<String>) {  
    val num1 = 25  
    val num2 = 20  
    val num3 = 30  
    val result = if (num1 > num2){  

        val max = if(num1 > num3){  
            num1  
        }else{  
            num3  
        }  
        "body of if "+max  
    }else if(num2 > num3){  
        "body of else if"+num2  
    }else{  
        "body of else "+num3  
    }  
    println("$result")  
}

Kotlin 条件 if…in

fun main(args: Array<String>) 
{
    val x = 12
    if (x in 1..8) {
        println("x 在区间内")
    } else {
        println("不在区间内")
    }
}

when 表达式

Kotlin when表达式是一个返回值的条件表达式。 Kotlin when表达式用于替换switch语句。 Kotlin when表达式相当于其他语言(Java,C++,C)中的switch语句。

使用when作为表达式

fun main(args: Array<String>){  
    var number = 4  
    var numberProvided = when(number) {  
        1 -> "One"  
        2 -> "Two"  
        3 -> "Three"  
        4 -> "Four"  
        5 -> "Five"  
        else -> "invalid number"  
    }  
    println("You provide $numberProvided")  
}

使用没有表达的when语句

使用when时,表达式也不是必须要使用的,因为它可以像在其他语言中一样正常使用。

fun main(args: Array<String>){  

    var number = 4  
    when(number) {  
        1 -> println("One")  
        2 -> println("Two")  
        3 -> println("Three")  
        4 -> println("Four")  
        5 -> println("Five")  
        else -> println("invalid number")  
    }  

}

when使用大括号的多重声明

可以使用条件块中包含的多个语句。

fun main(args: Array<String>){  
    var number = 1  
    when(number) {  
        1 -> {  
            println("Monday")  
            println("First day of the week")  
        }  
        7 -> println("Sunday")  
        else -> println("Other days")  
    }  
}

when 多个分支

fun main(args: Array<String>){  
    var number = 8  
    when(number) {  
        3, 4, 5, 6 ->  
            println("It is summer season")  
        7, 8, 9 ->  
            println("It is rainy season")  
        10, 11 ->  
            println("It is autumn season")  
        12, 1, 2 ->  
            println("It is winter season")  
        else -> println("invalid input")  
    }  
}

在范围内使用when

when表达式还检查条件提供的输入范围。 使用..(双点)运算符创建范围。 in运算符用于检查值是否属于某个范围。

fun main(args: Array<String>){  
    var number = 7  
    when(number) {  
        in 1..5 -> println("Input is provided in the range 1 to 5")  
        in 6..10 -> println("Input is provided in the range 6 to 10")  
        else -> println("none of the above")  
    }  
}

任意表达式作分支条件

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

检测一个特定类型的值

检测一个值是(is)或者不是(!is)一个特定类型的值。注意: 由于智能转换,你可以访问该类型的方法和属性而无需任何额外的检测。

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

取代 if-else if链

when 也可以用来取代 if-else if链。 如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}


try…catch 表达式

try…catch 表达式 和 java 的表达式基本一致。

如本文“对您有用”,欢迎随意打赏作者,让我们坚持创作!

0 打赏
Enamiĝu al vi
不要为明天忧虑.因为明天自有明天的忧虑.一天的难处一天当就够了。
543文章 68评论 294点赞 594085浏览

随机文章
Docker—DockerFile(五)
5年前
MyBatis笔记16—逆向工程
5年前
ElasticSearch—增删改查(七)
5年前
Redis笔记—五种数据类型
5年前
Java—事件驱动进行代码解耦(EventBus)
3年前
博客统计
  • 日志总数:543 篇
  • 评论数目:68 条
  • 建站日期:2020-03-06
  • 运行天数:1927 天
  • 标签总数:23 个
  • 最后更新:2024-12-20
Copyright © 2025 网站备案号: 浙ICP备20017730号 身体没有灵魂是死的,信心没有行为也是死的。
主页
页面
  • 归档
  • 摘要
  • 杂图
  • 问题随笔
博主
Enamiĝu al vi
Enamiĝu al vi 管理员
To be, or not to be
543 文章 68 评论 594085 浏览
测试
测试
看板娘
赞赏作者

请通过微信、支付宝 APP 扫一扫

感谢您对作者的支持!

 支付宝 微信支付