Kotlin 的函数是其强大表达力的核心,融合了面向对象和函数式编程的优点。下面这个汇总了主要的函数类型和核心概念,让你快速构建知识框架。

🔹 普通函数 使用 fun 关键字声明。代码复用的基础。

 fun greet(name: String) { println("Hello, $name") }

🔹 扩展函数 为已有类添加新功能,无需继承。

fun String.lastChar(): Char = this[length - 1]

🔹 高阶函数 将函数作为参数或返回值。函数式编程的基石。

 fun list.apply(operation: (T) -> Unit) { forEach(operation) }

🔹 Lambda 表达式 匿名函数的简洁语法。

val sum = { x: Int, y: Int -> x + y } 或 list.filter { it > 0 }

🔹 作用域函数 (let, apply, run, with, also) 在对象的上下文中执行代码块,简化操作。

 person.apply { name = "Tom"; age = 20 }

🔹 局部函数 在函数内部定义函数,实现逻辑封装。 在外部函数内定义,可访问外部函数的局部变量

🔹 尾递归函数 (tailrec) 将递归优化为循环,防止栈溢出。

tailrec fun factorial(n: Int, acc: Int = 1): Int = if (n<=1) acc else fact(n-1, n*acc)

🔹 中缀函数 (infix) 允许以 a function b 格式调用,提升可读性。

 infix fun Int.shl(x: Int): Int { ... } 

使用:1 shl 2

🔹 泛型函数 增加代码的类型安全性和复用性。 fun singletonList(item: T): List { … }

🔹 函数式编程概念 强调纯函数、不可变性、组合。 使用表达式而非语句,力求无副作用

下面我们深入看看一些核心特性和高级用法。

💡 关键特性与细节

掌握Kotlin函数,还需要理解一些赋予其灵活性和简洁性的关键特性。

  1. 参数灵活性
    ◦ 默认参数:允许为函数参数设置默认值,有效减少重载函数的数量。调用时可以省略有默认值的参数 。

    ◦ 具名参数:在调用函数时,可以通过参数名来指定值,这意味着你可以忽略参数的顺序,使代码意图更清晰 。

  2. 单表达式函数
    当函数体只有一个表达式时,可以省略花括号,使用 = 连接,返回类型通常也可自动推断 。例如,

  fun double(x: Int) = x * 2
  1. 函数类型与引用
    在Kotlin中,函数也有自己的类型,格式为 (参数类型) -> 返回类型。你可以使用 :: 操作符获取一个已有函数的引用,并将其赋值给变量或作为参数传递 。例如,val myFunction: (Int) -> Int = ::double。

🚀 高级函数概念

在基础之上,一些高级概念能让你更好地运用函数式编程范式。

• 内联函数:使用 inline 关键字修饰高阶函数,可以避免Lambda表达式在运行时带来的额外开销。编译器会将函数体直接"内联"到调用处,提升性能 。

• 闭包:Lambda表达式或匿名函数可以访问并修改其定义作用域内的变量。这个特性非常强大,允许函数"记住"并操作其创建时的环境 。

• 函数组合与柯里化:

◦   函数组合是将多个函数串联起来,前一个函数的输出作为后一个函数的输入。

◦   柯里化是将一个多参数函数转换为一系列单参数函数的过程。例如,
fun add(x: Int) = { y: Int -> x + y }
调用方式为 add(5)(3) 。这为函数复用和组合提供了更多灵活性。
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐