kotlin 函数闭包


//闭包
//函数运行的环境就是闭包
//持有函数的运行环境
//函数内部可以定义函数 也可以定义类
val string = "hello world"
fun makeFun():()->Unit{
    var count = 0
    return fun(){
        println(++count)
    }
}
fun fibonacci():()->Long{
    var first = 0L
    var second = 1L
    return fun():Long{
        val result = second
        second+=first
        first = second-first
        return result
    }
}
fun fibonacci1(): Iterable<Long> {
    var first = 0L
    var second = 1L
    data class Person(val name:String)
    return Iterable { 
        object:LongIterator(){
            override fun hasNext() = true

            override fun nextLong(): Long {
                val result = second
                second+=first
                first = second-first
                return result
            }

        }
    }
}

fun add(x:Int)=fun(y:Int) = x+y

fun add1(x:Int):(Int)->Int{
    return fun(y:Int):Int{
        return x+y
    }
}
fun main(args: Array<String>) {
    val x = makeFun()
    x()
    x()
    x()//函数的作用域没有被释放 
    
    val f = fibonacci()
    println(f())
    println(f())
    println(f())
    
    for(i in fibonacci1()){
        if(i > 100)break
        println(i)
    }
    var add5 = add(5)
    println(add5(2))
}
### Kotlin 函数概述 Kotlin函数使用 `fun` 关键字来声明[^2]。函数定义的一般形式如下: ```kotlin visibleModifier fun functionName(parameterList): returnType { functionBody } ``` 其中,`visibleModifier` 是可选的可见性修饰符,默认为公共 (`public`)。 #### 函数定义与调用 当创建一个简单的函数时,语法结构相对简单。例如,下面是一个将输入整数翻倍的函数示例: ```kotlin fun double(x: Int): Int { return 2 * x } // 调用此函数的方式很简单 val result = double(4) // 结果应为8 ``` #### 参数处理 对于具有多个参数的情况,在定义过程中可以直接给定默认值,从而允许省略某些参数而不影响正常工作。此外,还可以通过命名方式传递这些参数以提高代码清晰度[^1]。 #### 返回值说明 每个函数都需明确指出其返回的数据类型;如果不需要任何输出,则应该标注为 `Unit` 类型(类似于 Java 中 void)。值得注意的是,单表达式的函数可以通过简化写法直接写出逻辑而无需显式地加上 `{}` 和 `return` 关键词。 #### 高级特性支持 除了基本功能外,Kotlin 还提供了多种高级特性的实现方法,如 Lambda 表达式、匿名函数以及内联函数等。特别是关于如何把其他函数当作参数或者返回值的形式进行了优化设计,使得编程更加灵活高效[^3]。 ```kotlin // 计算器例子展示了如何利用字符串决定具体的操作,并最终得到相应的二元运算结果。 fun calculate(operation: String): (Int, Int) -> Int { when (operation) { "+" -> return { a, b -> a + b } "-" -> return { a, b -> a - b } "*" -> return { a, b -> a * b } "/" -> return { a, b -> a / b } else -> throw IllegalArgumentException("Unsupported operation: $operation") } } ``` 上述代码片段演示了一个接受操作符名称作为输入并返回对应计算行为的例子。这里使用的闭包机制让开发者能够轻松构建动态变化的功能模块。 #### 扩展与其他特殊类型的函数 为了增强语言表现力,还引入了诸如扩展函数这样的概念,它允许向现有类添加新成员而无须修改源码文件。另外也有专门针对特定场景定制化的中缀记号风格和尾递归优化版本可供选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值