1. kotlin 闭包简单例子
闭包
任何支持函数式编程的语言都都支持闭包
闭包的作用- 让函数成为编程语言中的一等公民
 - 让函数具有对象所有的能力(封装)
 - 让函数具有状态
 
很明显的是java不支持闭包
kotlin的闭包(每个java程序员都想要的语言特性)
为什么需要函数成为一等公民
all men are created equal
java中对象是一等公民,对象有状态
函数是没有状态的,调用完毕后,里面的数据会被回收,不会被保存
java代码
public class Test {
    public void test(){
        public void test(){
        }
    }
}
方法里面 放方法。报错,java没办法理解这种代码,在java中 函数是二等公民
二等公民是不可以出现在函数里面的。他只能出现在类的定义里kotlin里面
函数和普通变量一样是一等公民,他可以拥有一等公民拥有的所有主权,。
fun test(){
     
    var a=3
     fun test1(){
         
     }
}1.好处,可以在函数的内部声明函数
- 函数参数可以是函数,函数的返回值可以是函数
 - 这就是函数编程的特点 。
 
java 的方法里面
传递的参数只能是数据类型,我们定义的对象和基本数据类型
输出的呢 也是数据类型
kotlin 函数是一等公民
传递是函数,传递的数据
普通函数和闭包函数
普通函数不携带状态,调用完毕后里面所有的内容就会被释放掉。
下次调用的时候,里面的变量会再次去声明
fun test(){
    var a=3
    println(a);
}
fun main(args: Array<String>) {
    test()
}函数不携带状态,维护起来就需要额外的成本,比如我们需要声明一个额外的变量来记录他的状态。
闭包让函数可以携带状态。
fun test():()->Unit{
    var a=3 //状态
    return  fun(){
        a++;
        println(a);
    }
}
fun main(args: Array<String>) {
    var t=test()
    t();
    t();
    t();
}我们定义了一个函数,返回值是函数 。
- 函数不写返回值,返回值为空的的时候默认为Unit,Unit可以省略不写
 - 当返回值不为空的时候必须写出来
 
fun test():()->Unit
:后面写小括号表名 函数需要返回一个函数,()里面可以写参数, 小括号后面是函数的返回值类型,我们不可以写:号了,改为->,但返回值的类型为空的时候也必须写Unit了,不可以省略。闭包总结
函数里面声明函数,函数里面返回函数,就是闭包
1.函数内部的局部变量的状态保存住了 (变量的值就是状态)
2.a 被隐藏起来了,但我们调用函数可以改变状态,或者获得a的值,这点就是函数的面向对象,让函数具有封装的能力,让函数既有了状态。
相关推荐
  yuwinter    2020-10-14  
   归去来兮    2020-09-18  
   Ericbig    2020-07-19  
   chaigang    2020-06-27  
   yogoma    2020-06-14  
   Andrewjdw    2020-05-27  
   jokerdby    2020-05-19  
   Kingonion    2020-04-23  
   ELEMENTS爱乐冬雨    2020-04-21  
   sunlizhen    2020-04-17  
   LczPtr    2020-04-14  
   Livis的开发之路    2020-03-11  
   Airuio    2020-03-06  
   Livis的开发之路    2020-02-28