Kotlin 语法:字符串空值和 When 表达式

本文介绍了Kotlin中如何处理字符串空值,展示了其相较于Java的便捷之处。通过在函数参数类型后添加?,可以允许参数为null。同时,详细解析了Kotlin的when表达式,包括基本写法、带返回值的使用以及不带参数的情况,展现了其简洁性和安全性。when表达式在Kotlin中相当于Java的switch...case,但更加强大且避免了忘记break带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  

Kotlin 语法:字符串空值和 When 表达式

  字符串空值处理

  先来看一段代码

  fun getUserName(uName: String): String { return "userName=" + uName}fun main(args: Array) { println(getUserName("nwd123123")) /** * 总结: * 如果参数 uName 不能为空的话,那么在调用时所传的值就不可能为空; * 如果有必要传递 null 值,那么需要在函数参数类型后面加上 ? */ println(getUserName(null))}

  说明:在 main 函数调用了函数 getUserName 函数,并传入参数 nwd123123,运行结果如下:

  userName=nwd123123

  这没有什么难度,但是我们实际开发中,有可能用户名为 null,那么在 java 中需要我们手动去判断做对应的处理,但是 kotlin 也是一样的吗?修改上述代码如下:

  fun getUserName(uName: String): String { return "userName=" + uName}fun main(args: Array) { // 这个时候编译器已经给出错误提示,程序是没法编译通过的,提示信息如图 println(getUserName(null))}

  说明:Kotlin 语言自动做了非空处理,也就是帮我们判断了这里的参数是否为 null,这点相对于 java,又是一个优势所在。

  但是我们有时候参数可以为空,甚至有时候就需要传一个值为 null 的参数,那该怎么办呢?看下面的代码:

  // 请注意这里的参数类型后面的变化fun getUserName(uName: String?): String { return "userName=" + uName}fun main(args: Array) { println(getUserName(null))}

  说明:如果允许传递 null 值,那么在形参类型的后面的加上?即可。

  when 表达式

  Kotlin 中的 when 对应 java 中的 switch...case ,下面看 kotlin 中的 when 几种写法。

  第一种写法

  // 基本写法fun getDayHours(type: Int) { when (type) { 1 -> println("我每天至少保持学习 ${type} 个小时.") 2 -> println("我每天至少保持不行 ${type} 公里.") 7 -> println("我每天至少保持休息 ${type} 个小时.") else -> println("除了工作之外,请记得给自己放松。") }}

  说明:不再有 case 和 break 关键字,而是直接使用 -> 和 else 就搞定了,而且在 java 中的 break 语句要是忘记了,会引起想不到的后果,但是 kotlin 就不会存在这个问题,这又是一大优势所在。

  第二种写法

  fun getHourFromLanage(lanage: String): Float { var hour=when (lanage) { "Kotlin" -> 1f "Android" -> 0.5f "Python" -> 0.5f else -> 8f } return hour}

  说明: Kotlin 中的 when 表达式是有返回值的,所以,当函数有返回值的时候可以直接将 when 表达式的值作为函数的返回值。

  第三种写法:直接返回 when 表达式的值

  fun getHourFromLanage(lanage: String)=when (lanage) { "Kotlin" -> 1f "Android" -> 0.5f "Python" -> 0.5f else -> 8f}

  说明:是第二种写法的在升级,这里其实函数 getHourFromLanage 的返回值写也可以,不写也可以。

  第四种写法:不带参数的 when

  /*** 不带参数的 when*/fun whenSensorGenerator(gradeA: Int, gradeB: Int)=when { (gradeA - gradeB >=15) -> "存在偏科情况" (gradeA - gradeB < 15 && gradeA - gradeB > 0) -> "基本不偏科" (gradeA - gradeB==0) -> "均衡发展" else -> "暂无记录"}

  说明:同样该函数的返回值可写,也可不写。这样的表达式是不是很简洁呢?

  你未读,代码与生活,寻找爱学习、爱读书、爱分享的你。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值