Kotlin学习之旅(D5)-高级语法

前言

Kotlin学习之旅(D1)-学习计划&基本语法

Kotlin学习之旅(D2)-基本语法

Kotlin学习之旅(D3)-类与继承

Kotlin学习之旅(D4)-函数与Lambda表达式

高级语法

 

空安全

写过Java代码的人都知道,空指针异常是时刻都要注意的,特别是在Android里面,一个NullPointerException就会让App Crash,因此在Kotlin里面,为了消除来自代码空引用的危险,默认引用是不能为空的。

在Kotlin里面,如果允许某个变量为null,我们可以通过 “ ? ” 来表示:

var b: String? = "abc"
b = null // ok

var a: String = "abc"
a = null // 编译错误

如果变量是可以为空的,那么每次都需要显示检查是否为null:

val l = if(b != null) b.length - 1

或者,通过安全调用操作符 -> “ ?. “

fun main(args: Array<String>) {
    val a = "Kotlin"
    val b: String? = null
    println(b?.length)    // 如果b为null,则返回null
    println(a?.length)
}

!!操作符

这个操作符在kotlin里面经常都能看到,他的作用就是:非空断言操作符。例如: a!! ,如果a为null,那么就会抛出异常,如果不为null,则返回a的值

因此,如果你不希望NPE没有被捕获而导致appcrash,也不希望字符串为null但是没有处理,那么你就需要使用!!操作符,在变量为null的时候会抛出异常,我们就能在控制台看到了。

异常

在Kotlin中,我们使用throw - Exception 来抛出异常:

throw Exception("this is an exception")

使用try来捕获异常:

try {
    
} catch (e: Exception){
    
} finally {
    
}

这个语法结构和Java里面是很类似的

反射

类引用

在反射中我们用的比较多的就是类引用

val c = MyClass::class

该引用是 KClass 类型的值。

请注意,Kotlin 类引用与 Java 类引用不同。要获得 Java 类引用, 请在 KClass 实例上使用 .java 属性。

函数引用

通常我们会直接调用函数,通过 xxx() 来调用,但是我们也可以把函数传给另外一个函数当参数,使用的也是 ::操作符

fun isOdd(x: Int) = x % 2 != 0

fun main(args: Array<String>) {
    val numbers = listOf(1, 2, 3)
    println(numbers.filter(::isOdd))
}

在这个例子里面,我们首先定义了一个函数isOdd() 判断参数x是否为奇数,在main函数里,我们把这个方法作为参数传到了filter()方法里,这里其实是把函数当成 函数类型的值 ,这个和Lambda表达式有点类似,都是把函数作为参数。

属性引用

同样,我们也是使用::来引用属性

val x = 1
fun main(args: Array<String>) {
    println(::x.get())
    println(::x.name) 
}

在这里,表达式 ::x 的意思是:

求值为 KProperty<Int> 类型的属性对象,它允许我们使用 get() 读取它的值,或者使用 name属性来获取属性名。更多信息请参见关于KProperty 类的文档

总结

除了上面说的这几个语法,其实官方文档还有别的,例如:注解,类型别名,类型安全的构造器等等,我觉得这些语法用的都比较少,在看到或者需要用到的时候再去了解也可以,所以这里就没讲。

其实Kotlin的语法和Java还是很相像的,只是有一些技巧或者特性,需要在实践中掌握,从而提高开发效率。因此明天开始我们就会进入:Kotlin Idioms 环节,介绍一些好用的开发技巧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值