Kotlin学习笔记(四)-函数补充

今天继续讨论kotlin的函数。

    上一篇讲到,变长函数,有一个问题如果想要往变长函数中vararg参数传的参数过多,能不能直接传一个数组呢?答案是肯定的,只须在数组前加*。例如:
   

val size = asNub(1,2,*arr,3)

     kotlin的函数是可以在文件顶级声明的,这意味着函数并不需要像在java中一样必须依附于类,顶级函数可以作用于不同的包。
     kotlin支持局部函数,说明白点就是函数嵌套。官方给出的例子:
    

fun reachable(from:Vertex, to:Vertex):Boolean{
                 val visited = HashSet<Vertex>()
                 fun dfs(current: Vertex)   {                               
                            if (current == to)  return@reachable true//返回外层函数@就可以
                            if (!visited.add(current))return
                            for(v in current.neighbors)
                                        dfs(v)
                  }
                  dfs(from)
                  return false
                  }

       如果函数中有泛型参数,则声明时在函数名前加<T>
    尾递归函数,kotlin支持函数尾递归,其实质是循环,而不是递归,这避免了递归可能出现的栈溢出的问题,在定义时使用 tailrec,编译器会优化递归,并用高效迅速的循环代替它。
看例子:   


tailrec fun findFixPoint(x:Double=1.0):Double=
                   if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
 
     高阶函数,就是参数可以为函数的函数,例如:  


fun <T> addFun(list : List,f : ( T , T ) -> T) : T?{
               var x:T? = null
              list.add(f(test1,test2))
              return list
}
   
  第二个参数是一个有两个参数的函数,返回值为T类型。  
  kotlin还可以使用字面函数,如a.length>b.length
  字面函数可以访问闭包。闭包,即访问自身范围外的声明的量
  关于kotlin的函数,还有一些内容没有讲到,主要是因为和java的语法差不多。但是还有很多细节,本人没有考虑到,后期在学习kotlin的项目时,还会再加以巩固。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值