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

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

作者: IT一书生 | 来源:发表于2018-04-17 10:12 被阅读14次

空安全

  • 可空类型和非空类型 ?
        // 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)
}

相关文章

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

    空安全 可空类型和非空类型 ? 在条件中检查 null 安全调用 ?. Elvis 操作符 ?: ...

  • Kotlin基本语法之(五)类型与空安全

    本小节是Kotlin基本语法的一个重点章节,介绍了Kotlin中的类型体系和空安全这个重要特性,最后分析了空安全在...

  • Kotlin 入门

    【Kotlin 入门】 本文介绍了Kotlin入门应该知道一些基本语法概念。包括变量、常量、函数、空安全、类定义、...

  • 2017-07-18-kotlin Android基础

    kotlin Android基础 1,实现一个基本的数据类 2,空安全: Kotlin,如很多现代的语言,是空安全...

  • Kotlin学习笔记(一)

    本文介绍了Kotlin入门应该知道一些基本语法概念。包括变量、常量、函数、空安全、类定义、类继承、数据类、接口定义...

  • Kotlin入坑基础篇二

    Kotlin入坑基础篇一 这一篇主要讲解kotlin进阶,内容主要有以下:空安全kotlin单例函数扩展智能转换 ...

  • Android开发kotlin学习(二)

    1.kotlin的空安全 为啥子说kotlin是空安全的?和Java相比,kotlin的空安全可以带来哪些便利之处...

  • Kotlin

    Android Kotlin 编译gradle基本配置 - 简书 五分钟学会 Kotlin 语法 - 简书 Kot...

  • Kotlin入门指南

    Kotlin的优势 代码简洁高效、强大的when语法,不用写分号结尾,findViewById光荣退休,空指针安全...

  • kotlin进阶—函数、泛型、高级特性

    以下是我的kotlin系列文章kotlin基础知识—基本语法(一)kotlin基础知识—基本语法(二) 前言 我个...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/ffuxhftx.html