ラムダ式と高階関数

  • 投稿者:
  • 投稿カテゴリー:その他

ラムダ式

{ }内の最後の部分が戻り値

//ラムダ式 (関数型)
// (Int) -> Int 関数のパラメータ型と戻り型
// { a: Int -> a * 3 }の部分がラムダ関数
val triple: (Int) -> Int = { a: Int -> a * 3 }
println(triple(5))

// ラムダ式の省略型
// itの部分はパラメータ
val triple: (Int) -> Int = { it * 3 }
println(triple(5))

高階関数

関数(ラムダ)を別の関数に渡すこと、または関数から別の関数を返すこと

// ラムダ式をfilter関数に渡す例
peopleAges.filter { it.key.length < 4 }

// パラメータとラムダ式を関数に渡す例
val peopleNames = listOf("Fred", "Ann", "Barbara", "Joe")
println(peopleNames.sortedWith { str1: String, str2: String -> str1.length - str2.length })


// 単一の抽象メソッドの引数と戻り型が同じ時の例
// View.OnClickListenerの単一抽象メソッドはonClickメソッドで、これらはViewを引数にとり戻りなしで共通
calculateButton.setOnClickListener(Object: View.OnClickListener {
    override fun onClick(view View?){
        calculateTip()
    }
})
// これを高階関数で省略すると
calculateButton.setOnClickListener{view -> calculateTip() }

// ラムダのviewパラメータは使用しないので更に省略すると
calculateButton.setOnClickListener{ calculateTip() }

トレーニング > KOTLIN を用いた ANDROID の基本 > ナビゲーション > 画面の移動 > Kotlinのコレクション > 4. ラムダ式と高階関数の詳細