提示:本文为Kotlin学习的Part 2部分
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
(1)空安全
kotlin中的非空类型
在Java中,运行程序时会经常出现空指针异常的问题,因为java在编译期对于会出现空指针的地方并不会报错,只有在运行时才会抛出异常。所以在编写代码时就得格外的小心,避免运行时崩溃的问题。
而kotlin则采取了在编译时就会报错,让开发者提前在编译期就重视空指针的问题。在kotlin中,正常情况下变量是非空类型的,不能直接赋空值。
kotlin中的可空类型
Kotlin中也是存在可空类型的,假如上面的String类型我一定要给它赋空值,只需将代码进行如下改写:
kotlin中的空安全
虽然Kotlin中允许存在空类型,让一个空类型变量运行就意味着风险依然存在,所以为了应对潜在风险,在kotlin中不允许在可空类型上调用函数。
安全调用操作符
有两种方法分别是:?和!!
对于?:
输出:
此时就不会报错了,它就是kotlin中定义的一个安全调用操作符。这种写法的意思是当该变量为空时,它就不会调用这个函数了,会直接跳过,所以这个代码在运行时就不会报空指针异常,编译时也不会报错了。
对于!!:
输出:
此时可以通过编译,但运行后会抛异常。
使用if判空
当然在kotlin中还是可通过if判空来保证空安全的,但大量的if判空操作会显得代码不优雅。所以相比起来使用安全调用操作符会更灵活,代码也更整洁,可以用安全操作符进行多个函数的链式调用。
空合并操作符
Java中的三元表达式写法:
Kotlin中写法为:
let
一、在同一个作用域下操作变量,使代码更加优雅
Java
Kotlin
二、判断null操作
原本的Kotlin写法:
Kotlin中可以写为:
(2)异常
(3)字符串
subString
在java中,subString是用来截取字符串的,在Kotlin中也是一样的,只是Kotlin对subString加了一些新的传参方式,支持IntRange类型的参数,IntRange表示一个整数范围类型。
split
==
kotlin中==用于比较内容,而 ===用于比较是否指向同一个对象的引用。
需要注意的是:因为不管是在Java还是Kotlin中,如果直接为一个String类型的变量赋值,第一次出现的,会被存放在字符串常量池,然后返回字符串常量池里的引用,否则则直接返回字符串常量池里的引用。
forEach
forEach用于字符串的遍历
(4)数据类型
Double->Int
(5)内置函数
apply
apply函数是一个配置函数,当接受者(对象)调用apply函数时,可以通过该函数来对对象进行配置。配置完成后会返回配置好的对象。
let
let函数可以使某个变量作用于它的lambda表达式中,让后用默认的it关键字引用这个变量;
let不同于apply的地方就是,let会将接受者作为值参传入给lambda中,通过it关键字对接收这进行操作。而apply则是默认在该函数中的作用域都是针对接收者的,不需要传东西进去。执行完后,let会返回lambda表达式的最后一行,apply返回当前对象。
run
run和apply有些相似,他们都是默认在该函数中的作用域都是针对接收者的(调用该函数的对象)。但是他们二者返回的内容并不同,run函数返回的是lambda的结果(结果返回类似let)。
with
with函数是run函数的变体,二者功能行为相同,但调用方式不同
also
also和let函数功能相似,also也是将接收者作为值传入到lambda中,但不同于let最后返回的是lambda结果,also返回的是接收者对象。
takeIf
takeIf函数需要判断lambda中提供的条件表达式给出的结果,如果是true,则从takeIf函数返回接收者对象,如果是false,则返回null。
takeUnless
与takeIf相反,只有判断结果是false,才会接受对象
(6)集合
集合——List
基本操作
kotlin中集合获取方式类似于java中获取数组元素,并且kotlin中获取集合元素上还提供了多种安全的方式:
getOrElse():需要传两个参数,第一个是索引值,第二个是提供默认的lambda表达式,如果索引值不存在,会显示该lambda表达式的信息
getOrNull:如果为空则直接返回null结果,不会抛出异常
可变列表
list集合并没有提供动态添加或删除元素的函数,而在Kotlin中创建可变列表需要使用mutableListOf。
在kotlin中也可以使用+或者-来实现:
还可以用于删除指定元素
遍历集合
包括:
- for… in
- forEach
- forEachIndexed
解构集合
集合—Set
跟Java一样,List中的元素是可以重复的,而Set集合不能存储重复元素;
基本操作
Set集合创建方式与List方式差不多,但是元素获取Set集合是通过elementAt(index)这个函数来读取的。
可变集合
和List集合一样,Set集合也不能直接进行动态插入或删除,需要通过mutableSetOf创建可变Set集合。
集合转换
Set与List集合之间可以互相转换
集合—Map
创建map
to函数可以将左右两值转化成一个Pair对象,所以上面的代码也可以写为:
读取map
遍历map
可变map
数组类型
Kotlin中提供各种Array
总结
提示:kotlin学习part two