[2023] Kotlin チュートリアル パート 2 オブジェクト指向および関数型プログラミング 第 13 章 関数型プログラミングの基礎 - 高階関数とラムダ式 13.3 ラムダ式 13.3.1 ラムダ式の標準文法形式

[2023] Kotlin チュートリアル

ここに画像の説明を挿入

パート II オブジェクト指向プログラミングと関数型プログラミング

第 13 章 関数型プログラミングの基礎 — 高階関数とラムダ式

関数型プログラミングの考え方はオブジェクト指向と同じくらい古いものですが、関数型プログラミングをサポートするコンピューター言語が登場したのはごく最近のことです。これらの言語には、Swift、Python、Java 8、および C++ 11 が含まれます。新しい言語として、Kotlin は関数型プログラミングもサポートします。

13.3 ラムダ式

ラムダ式は、式、関数パラメータ、および関数の戻り値として使用できる匿名関数です. ラムダ式の演算結果は関数です.

13.3.1 ラムダ式の標準構文形式

Kotlin のラムダ式は非常に柔軟で、標準的な構文は次のとおりです。

{
    
    参数列表 ->
 	Lambda体
}

このうち、Lambda 式のパラメーター リストは関数のパラメーター リストと似ていますが、Lambda 式のパラメーター リストの前後に括弧がありません。矢印表記はパラメータ リストを Lambda 本体から分離し、Lambda 式は戻り値の型を宣言する必要はありません。

ラムダ式は戻り値を持つことができます. 戻りステートメントがない場合, ラムダ本体の最後の式はラムダ式の戻り値です. 戻りステートメントがある場合, 戻り値は戻りステートメントの後の式です.

[Tip] ラムダ式には関数や無名関数などの関数型がありますが、ラムダ式の定義から見えるのはパラメータの型だけで、戻り値の型宣言は文脈から推測できるため見えません。

栗を取る:

private fun calculate(opr: Char): (Int, Int) -> Int {
    
    

    return when (opr) {
    
    
        '+' -> {
    
     a: Int, b: Int -> a + b }
        '-' -> {
    
     a: Int, b: Int -> a - b }
        '*' -> {
    
     a: Int, b: Int -> a * b }
        else -> {
    
     a: Int, b: Int -> a / b }
    }
}

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))
}

ここに画像の説明を挿入

calculate 関数は高階関数であり、その戻り値は関数型 (Int, Int) -> Int です。コードでは 4 つの Lambda 式がそれぞれ定義されており、関数の型 (Int、Int)->Int は、計算関数で必要な戻り値の型と一致しています。

もちろん、式関数本体の形式で書くこともできます。

private fun calculate(opr: Char): (Int, Int) -> Int = when (opr) {
    
    
    '+' -> {
    
     a: Int, b: Int -> a + b }
    '-' -> {
    
     a: Int, b: Int -> a - b }
    '*' -> {
    
     a: Int, b: Int -> a * b }
    else -> {
    
     a: Int, b: Int -> a / b }
}

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))
}

式関数本体がコード ブロック関数本体よりもはるかに簡潔であることを確認することは難しくありません。

おすすめ

転載: blog.csdn.net/weixin_44226181/article/details/130024460