让你哇塞的Kotlin代码片段

程序员咋不秃头 2024-08-11 04:28:13

1. 扩展函数:

Kotlin的扩展函数允许在不直接修改现有类代码的情况下增加新的函数。这在你无法修改类或希望代码干净有序的情况下非常实用。

// 扩展函数示例 1fun View.gone(){ visibility =View.GONE}fun View.visible(){ visibility =View.VISIBLE}// 使用textView.hide()// 扩展函数示例 2// 该扩展函数将字符串的首字母大写fun String.capitalizeFirstLetter(): String { if (isEmpty()) return this return substring(0, 1).toUpperCase() + substring(1)}// 使用fun main() { val input = "this is kotlin" val outputString = input.capitalizeFirstLetter() println(outputString)}// 输出: This is kotlin2. 使用 let, run, apply, 和 also 扩展功能: Kotlin作用域函数

选择合适的作用域函数,请参考以下表格

函数上下文返回值let:"this"lambda函数的结果apply:"this"当前上下文对象with:"this"lambda函数的结果run:"this"lambda函数的结果also:"it"当前上下文对象

详情参考《Kotlin技巧:作用域函数let、run、with、apply和also》

3. 高阶函数

在Kotlin中,可以接受函数作为参数的函数或者可以返回函数的函数被称为高阶函数。

fun add(a: Int, b: Int): Int{ var sum = a + b return sum} // higher-order function definitionfun higherfunc(addfunc:(Int,Int)-> Int){ // invoke regular function using local name var result = addfunc(3,6) print("The sum of two numbers is: $result")}fun main(args: Array<String>) { // invoke higher-order function higherfunc(::add)}// output::The sum of two numbers is: 94. 使用when表达式在Kotlin中,when的工作方式和其他语言中的switch很相似,但是它更加智能和灵活。使用 Kotlin 的一件很酷的事情是,不需要像其他语言(如 Java)那样添加中断break。一旦找到匹配项,它就会运行该代码并从 when 块继续。替换冗长的“if-else-if”链,以获得更清晰的条件逻辑。

示例 1:范围

val age = 20when (age) { in 18..25 -> println("Young adult") in 26..60 -> println("Adult") else -> println("Not considered an adult")}

示例 2:使用 when 作为表达式

fun main() { var weekDay = 3 var day= when(weekDay) { 1->"Monday" 2->"Tuesday" 3->"Wednesday" 4->"Thursday" 5->"Friday" 6->"Saturday" 7->"Sunday" else-> "Not a week day" } print(day)}优点:增强代码的可读性和可维护性。避免嵌套 if 语句以获得更清晰的逻辑。5. Null安全和安全转换操作符空安全Kotlin 的 null 安全性由编译器强制执行,旨在通过消除代码中存在风险的 null 引用来防止 NullPointerExceptions。var a: String = "kotlin" // Regular initialization means non-nullable by defaulta = null // compilation error

要允许空值,可以通过编写 String? 将变量声明为可为空字符串:

var b: String? = "kotlin" // can be set to nullb = nullprint(b)安全调用 Kotlin 安全调用运算符?允许访问字段或调用可为空变量的方法。特别是,仅当变量的引用不为空时,该运算符才对变量执行操作。否则,返回 null。例如:fun main() { val a: String? = "kotlin" // it returns a's length, or null if a in null println(a?.length) // it returns a's value in uppercase, or null if a in null println(a?.uppercase())}安全转换

如果对象不是目标类型,则常规强制转换可能会导致 ClassCastException。另一种选择是使用安全强制转换,如果尝试不成功,则返回 null。

val obj: Any = "Kotlin"val str: String? = obj as? String
0 阅读:0