Kotlin入门学习记录
2023/11/28
安全转换
在使用类型转换时可能会转换失败导致异常,安全转换函数就是为了解决这个问题,以下为错误代码演示
//NumberFormatException: For input string: "8.98"
var number1:Int = "8.98".toInt()
println(number1)
Java代码如下
//NumberFormatException: For input string: "8.98"
int s = Integer.parseInt("8.98");
System.out.println(s);
to***OrNull安全转换函数
这种函数是尝试将字符串转换成对应的类型,如toIntOrNull()
将字符串转为Int类型如果失败则返回null,代码实现,如下
var number1:Int? = "8.98".toIntOrNull()
println(number1)
Java可以使用try{}catch(){}
完成类似操作,代码实现如下
Integer number1;
try {
number1 = Integer.parseInt("8.98");
} catch (NumberFormatException e) {
number1 = null;
}
System.out.println(number1);
Double转Int
函数 | 作用 |
---|---|
toInt() | 直接截取整数部分 |
roundToInt() | 四舍五入截取整数 |
代码实现如下
println(8.956756.toInt())//8
println(8.956756.roundToInt())//9
Double类型格式化
四舍五入,代码实现如下
println("%.2f".format(8.956756))//8.96
标准库函数
KT中为所有类型定义的函数
apply函数
当作配置函数使用,可以传入一个接收者,在apply
函数中进行调用一系列函数,包含关键字this
,如下
val file1 = File("e://test.txt")
file1.setReadable(true)
file1.setWritable(true)
file1.setExecutable(false)
//使用apply函数进行对象配置
val file2 = File("e://test.txt").apply {
setReadable(true)
setWritable(true)
setExecutable(false)
}
let函数
let
函数会将接收者传入lambda
中而apply
什么都不传,apply
返回的是对象而let
返回的是lamdba
的最后一行,包含关键字it
,代码实现如下
val result1 = listOf(4,2,3).first()
println(result1 * result1)
//使用let函数
val result = listOf(4,2,3).first().let {
it * it
}
println(result)
小小的练习:
fun main()
println(formatGreeting(null))//What's your name
println(formatGreeting("LY_C"))//Welcome LY_C
}
fun formatGreeting(guestName:String?):String{
return guestName?.let {
"Welcome $it"
}?:"What's your name"
}
run函数
run
函数作用和apply
一样但是run
返回的是lambda
的最后一行不是对象,包含关键字this
,实现代码如下
val file = File("e://a.txt")
val test = file.run {
readText().contains("LY_C")
}
println(test)//true
with函数
with
函数和run
函数差不多但是with
的调用方式不同,调用with
需要传递一个参数,代码实现如下
val b = with("LY_C-CRY-HHH") {
length >= 3
}
println(b)//true
also函数
also
和let
函数功能一样,但是also
返回的是接收者对象而let
返回lamdba
最后一行表达式,尤其适合针对同一原始对象,实现代码如下
var fileContents:List<String>
File("e://a.txt")
.also {
println(it.name)
}.also {
fileContents = it.readLines()
}
println(fileContents)
takeif函数
takeif
函数需要判断lambda
中提供的条件表达式,为true
时返回接收者对象,为false
时返回的是null
,一般适用于需要判断条件在执行任务的场景,代码实现如下
var file = File("e://a.txt")
.takeIf { it.exists() && it.canRead() }
?.readText()
println(file)
takeUnless函数
takeUnless
和takeIf
相反,只有判断条件为false
时,takeUnless
才会返回原始接收者对象,为true
时返回null
,代码实现如下
var file = File("e://a.txt")
.takeUnless { it.isHidden }
?.readText()
println(file)
标准库函数总结
函数 | 是否将接收者值传给lambda | 是否有相关作用域 | 返回 |
---|---|---|---|
let | 是 | 否 | lambda结果 |
apply | 否 | 是 | 接收者对象 |
run | 否 | 是 | lambda结果 |
with | 否 | 是 | lambda结果 |
also | 否 | 否 | 接收者对象 |
takeIf | 否 | 否 | 可空型接收者对象 |
takeUnless | 是 | 否 | 可空型接收者对象 |
排列组合是吧 敲!