0Pricing
Kotlin Academy · レッスン

関数にLambdaを渡す

ラムダを引数として渡し、trailing lambda構文を使用します。

「関数にLambdaを渡す」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

ラムダを受け取る関数

高階関数とは、ラムダのような関数をパラメーターとして受け取る関数です。map、filter、forEachはこの仕組みで動作します。

高階関数の宣言

パラメーターの型として関数型を使います。
fun applyTwice(n: Int, op: (Int) -> Int): Int {
    return op(op(n))
}
println(applyTwice(3, { it * 2 }))  // 12

末尾ラムダ構文

最後のパラメーターが関数の場合、ラムダをかっこの外側に移動できます。これが「末尾ラムダ」構文です。
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))

// Standard:
applyTwice(3, { it * 2 })
// Trailing lambda:
applyTwice(3) { it * 2 }

かっこなしの末尾ラムダ

ラムダが唯一の引数である場合は、かっこ全体を省略できます。
fun execute(block: () -> Unit) = block()

// With parens:
execute({ println("Hello") })
// Without parens (idiomatic):
execute { println("Hello") }

ラムダ変数を渡す

格納したラムダの参照は、その変数名を使って渡せます。
val double = { n: Int -> n * 2 }
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(5, double))  // 20

::による関数参照

::を使うと、名前付き関数をラムダ互換の引数として渡せます。
fun triple(n: Int) = n * 3
fun applyTwice(n: Int, op: (Int) -> Int) = op(op(n))
println(applyTwice(2, ::triple))  // 18

複数のラムダパラメーター

関数は複数のラムダパラメーターを受け取れます。末尾ラムダ構文を使用できるのは最後のパラメーターだけです。
fun transform(
    value: Int,
    before: (Int) -> Int,
    after: (Int) -> Int
) = after(before(value))

println(transform(5, { it * 2 }, { it + 1 }))  // 11

filter にラムダを渡す

filter は述語ラムダ、つまり要素を受け取って Boolean を返す関数を受け取ります。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)  // [2, 4, 6]

高階関数の連結

複数の高階関数呼び出しを連結すると、表現力の高いデータパイプラインを構築できます。
val result = (1..10)
    .filter { it % 2 != 0 }  // odds
    .map { it * it }          // square
    .take(3)                  // first 3
println(result)  // [1, 9, 25]

ラムダによる変数のキャプチャ

ラムダは周囲のスコープにある変数をキャプチャできます(クロージャ)。Kotlin では var の値をキャプチャして変更することもできます。
var total = 0
listOf(1, 2, 3, 4).forEach { total += it }
println(total)  // 10

関数からラムダを返す

高階関数はラムダを返すこともでき、そのような関数でファクトリ関数を作成できます。
fun multiplierOf(factor: Int): (Int) -> Int {
    return { n -> n * factor }
}
val double = multiplierOf(2)
val triple = multiplierOf(3)
println(double(5))  // 10
println(triple(5))  // 15

簡単な確認

末尾ラムダ構文を使って、ラムダを括弧の外に移動できるのはいつですか?

まとめ

高階関数はラムダをパラメーターとして受け取ります。ラムダが最後の引数の場合、末尾ラムダ構文によってラムダを括弧の外に移動できます。`::` で名前付き関数参照を渡します。次は暗黙の `it` パラメーターです。

よくある質問

「関数にLambdaを渡す」レッスンは無料ですか?

はい。「関数にLambdaを渡す」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「関数にLambdaを渡す」で何を学びますか?

ラムダを引数として渡し、trailing lambda構文を使用します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「関数にLambdaを渡す」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Lambdaとは?構文と型
  2. 関数にLambdaを渡す
  3. it:暗黙のパラメータ
  4. コレクションのfilter、map、find
← Kotlin Academyに戻る