[2023] Kotlin チュートリアル
記事ディレクトリ
パート II オブジェクト指向プログラミングと関数型プログラミング
第 13 章 関数型プログラミングの基礎 — 高階関数とラムダ式
関数型プログラミングの考え方はオブジェクト指向と同じくらい古いものですが、関数型プログラミングをサポートするコンピューター言語が登場したのはごく最近のことです。これらの言語には、Swift、Python、Java 8、および C++ 11 が含まれます。新しい言語として、Kotlin は関数型プログラミングもサポートします。
13.2 高階関数
関数型プログラミングの鍵は、高階関数のサポートです。関数は別の関数のパラメーターとして使用するか、値を返すことができます。この関数は「高階関数」です。
13.2.2 関数リテラル
関数型変数は宣言できるのですが、関数型変数はどのようなデータを受け取ることができるのでしょうか? つまり、関数リテラルをどのように表現するかということですが、関数リテラルは次の 3 つの方法で表現できます。
- 関数参照。定義済みの名前付き関数への参照。関数リテラルとして使用できます。
- 無名関数。名前のない関数、つまり無名関数も関数リテラルとして使用できます。
- ラムダ: 式。ラムダ式は、関数リテラルとして使用できる匿名関数です。
栗を取る:
fun calculate(opr: Char): (Int, Int) -> Int {
// 加法函数
fun add(a: Int, b: Int): Int {
return a + b
}
// 减法函数
fun sub(a: Int, b: Int): Int {
return a - b
}
val result: (Int, Int) -> (Int) =
when (opr) {
'+' -> ::add
'-' -> ::sub
'*' -> {
// 乘法匿名函数
fun(a: Int, b: Int): Int {
return (a * b)
}
}
else -> {
a, b -> (a / b) } // 触发Lambda 表达式
}
return result
}
fun main() {
val f1 = calculate('+')
val f2 = calculate('-')
val f3 = calculate('*')
val f4 = calculate('/')
println(f1(10, 5))
println(f2(10, 5))
println(f3(10, 5))
println(f4(10, 5))
}
このコードでは、'+' -> ::add
と は関数参照'-' -> ::sub
です。
上記のコード'+' -> ::add
と は'-' -> ::sub
関数参照であり、「ダブル コロンと関数名」の形式で参照されます。add と sub は 2 つの
ローカル、それらの関数参照表現は add と sub であり、結果に次のように割り当てることができます。関数リテラル変数。
このコードはfun(a: Int, b: Int): Int { return (a * b) }
無名関数を宣言しています.無名関数は関数名を必要としません.結果変数に直接割り当てられた式です.
コードで使用される Lambda 式{ a, b -> (a / b) }
も結果変数に割り当てることができます。
関数型の変数を取得した後の使い方は?答えは、関数として呼び出すことができるということです。