Kotlin学習ノート(四)-関数補完


      kotlin   。

    前回、変長関数について、変長関数のvarargパラメータに伝達したいパラメータが多すぎる場合、直接配列を伝達できますか?答えは肯定的で、配列の前に*を加えるだけです.例:   
val size = asNub(1,2,*arr,3)

     kotlinの関数はファイルのトップレベルで宣言できます.これは、javaのようにクラスに依存する必要はありません.トップレベルの関数は異なるパッケージに作用することができます.     kotlinはローカル関数をサポートし、白点が関数ネストであることを示します.公式の例:    
fun reachable(from:Vertex, to:Vertex):Boolean{
                 val visited = HashSet()
                 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
                  }

       関数に汎用パラメータがある場合は、宣言時に関数名にを付けます.    テール再帰関数、kotlinは関数テール再帰をサポートし、実質的に再帰ではなくループであり、再帰の可能性のあるスタックオーバーフローの問題を回避し、定義時にtailrecを使用すると、コンパイラは再帰を最適化し、効率的で迅速なループで置き換えます.例を見てみましょう.   
tailrec fun findFixPoint(x:Double=1.0):Double=
                   if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
       高次関数とは、パラメータが関数として使用できる関数です.たとえば、次のようになります.  
fun addFun(list : List,f : ( T , T ) -> T) : T?{
               var x:T? = null
              list.add(f(test1,test2))
              return list
}
      2番目のパラメータは2つのパラメータを持つ関数で、戻り値はTタイプです.     kotlinはまた、a.length>b.lengthのような字面関数を使用することもできる.  字面関数は閉パッケージにアクセスできます.閉パッケージ、すなわち、自分の範囲外の宣言にアクセスする量  kotlinの関数については、javaとの文法の差が少ないため、まだいくつかの内容が話されていません.しかし、まだ細かい点がたくさんありますが、本人は考えていません.後期にkotlinのプロジェクトを勉強するとき、また強固にします.