kotlin 由浅入深(五)基本语法(空安全、转换、区间)

空安全

  • 可空类型和非空类型 ?
        // 1、普通的 String 类型的变量不能为空
        var a: String ="abc"
        // a = null  //编译错误 - 直接在 AS 上报错
        // 直接调用,不用担心空指针异常
        a.length

        // 2、? 符号,声明为可空的变量(允许为空)
        var b: String? = "abc"
        b = null
        // b.length  b有可能为空,直接调用报错
  • 在条件中检查 null
        // 3、在条件中检查 b 是否为空
        val c = if (b != null) b.length else -1
  • 安全调用 ?.
        // 4、安全操作符 ?. 如果 b 不为空则返回长度,否则返回空。这个表达式的的类型是 Int?
        b?.length

        // 5、安全调用在链式调用是很有用的
        *?.*?.*?.*
  • Elvis 操作符 ?:
  // 6、如果 ?: 左边表达式不为空则返回,否则返回右边的表达式。注意右边的表带式只有在左边表达式为空是才会执行
  val d = b?.length ?:  -1

   // 7、注意在 Kotlin 中 throw return 是表达式,所以它们也可以在 Elvis 操作符右边
   fun foo(node: Node): String? {
        val parent = node.getParent() ?: return null
        val name = node.getName() ?: throw IllegalArgumentException("name expected")
    }
  • !! 操作符
        // 8、返回一个非空的 b 或者抛出一个 b 为空的 NPE
        val l = b !!.length
  • 安全转换
        // 9、普通的转换可能产生 ClassCastException 异常。另一个选择就是使用安全转换,如果不成功就返回空
        val aInt: Int? = a as? Int

使用值检查并自动转换

  • is !is 表达式
    检查一个对象是否是某个特定类型
if (obj is String) {
}
  • 智能转换
fun demo(x: Any) {
    if (x is String) {
       // 做过类型判断以后,obj会被系统自动转换为String类型
        print(x.length)
    }
}
  • 不安全”的转换符
注意 null 不能被转换为 `String` 因为它不是 `nullable`也就是说如果 `y` 是空的,则上面的代码会抛出空异常。
val x: String = y as String
  • "安全"转换符
    为了避免抛出异常,可以用 as? 这个安全转换符,这样失败就会返回 null
不管 as? 右边的是不是一个非空 String 结果都会转换为可空的。
val x: String ?= y as? String

区间range

操作符形式 .., in 和 !in 与其配合使用

for (i in 1..4) print(i) // 输出“1234”

for (i in 4..1) print(i) // 什么都不输出

if (i in 1..10) { // 等同于 1 <= i && i <= 10
    println(i)
}

// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出“13”

for (i in 4 downTo 1 step 2) print(i) // 输出“42”

// 使用 until 函数排除结束元素
for (i in 1 until 10) {   // i in [1, 10) 排除了 10
     println(i)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,811评论 9 118
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,778评论 19 139
  • 第4章 基本数据类型与类型系统 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 >...
    光剑书架上的书阅读 5,653评论 0 21
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,637评论 0 13
  • 二零一八年一月七号,杭州 小雨 来到杭州的第七天,已经习惯了到不同陌生城市的我,状态还是依旧的平静,没有喜悦某些...
    菁禾阅读 197评论 0 0

友情链接更多精彩内容