0Pricing
Android Academy · レッスン

ラムダと高階関数

振る舞いを値として渡します。

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

ラムダとは

ラムダ は、名前を付けずにインラインで記述できる小さな関数です。

波かっこで囲んで記述します。{ x -> x + 1 }。ラムダを使うと、データと同じように処理を渡せます。

すでにmapやfilterで使っています。

ラムダを変数に保存する

ラムダは値なので、変数に保存して後から呼び出せます。

関数と同じように、かっこを使って呼び出します。

fun main() {
    val square = { x: Int -> x * x }
    println(square(5))
    println(square(3))
}

itの省略記法

ラムダがパラメーターをちょうど1つ受け取る場合は、名前を省略して it を使えます。

短いラムダを簡潔で読みやすく記述できます。

fun main() {
    val nums = listOf(1, 2, 3, 4)
    val big = nums.filter { it > 2 }
    println(big)
}

複数のパラメーター

ラムダは複数のパラメーターを受け取れます。パラメーターは矢印の前でカンマ区切りにします。

ラムダの最後の式が戻り値になります。

fun main() {
    val add = { a: Int, b: Int -> a + b }
    println(add(4, 6))
}

高階関数

高階関数 とは、別の関数をパラメーターとして受け取るか、関数を返す関数です。

関数型 (Int) -> Int は「Intを受け取り、Intを返す」という意味です。mapやfilterはこの仕組みで動作します。

高階関数を記述する

ここでは、関数を受け取り、それを2回実行する applyTwice を定義しています。

パラメーター op の型は (Int) -> Int です。

fun applyTwice(x: Int, op: (Int) -> Int): Int {
    return op(op(x))
}

fun main() {
    println(applyTwice(3) { it + 1 })
}

末尾ラムダ構文

ラムダが最後の引数である場合は、かっこの外に移動できます。

そのため、list.filter { ... } はとてもすっきり見えます。以下の2つの形式は同じ意味です。

fun main() {
    val nums = listOf(1, 2, 3)
    println(nums.map({ it * 2 }))
    println(nums.map { it * 2 })
}

名前付き関数を渡す

ラムダが必要な場所には、:: を使って既存の名前付き関数を渡せます。これは関数参照と呼ばれます。

これにより、ロジックをラムダとして書き直さずに済みます。

fun isOdd(n: Int) = n % 2 == 1

fun main() {
    val nums = listOf(1, 2, 3, 4)
    println(nums.filter(::isOdd))
}

関数を返す

高階関数は関数を返すこともできます。ここでは multiplier が、乗算用のカスタムラムダを作成しています。

これは設定を行う簡単な方法です。

fun multiplier(factor: Int): (Int) -> Int {
    return { it * factor }
}

fun main() {
    val triple = multiplier(3)
    println(triple(5))
}

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

ラムダは、周囲のスコープにある変数を読み取れます。これを クロージャ と呼びます。

ここでは、ラムダが別の場所に渡された後も bonus を参照できます。

fun main() {
    val bonus = 10
    val nums = listOf(1, 2, 3)
    println(nums.map { it + bonus })
}

Androidでラムダが重要な理由

Androidでは、ラムダを使うとコールバックを簡潔に表現できます。ボタンのクリックリスナーは、フレームワークに渡すラムダにすぎません。

たとえば、button.setOnClickListener { showMenu() } は、タップされたときにコードを実行します。

クイックチェック

ラムダと高階関数についての理解度を確認しましょう。

まとめ

ラムダは、波かっこで記述する名前のないインライン関数です。パラメーターが1つの場合は it を使います。

高階関数は関数を受け取ったり返したりするため、mapやfilterのような再利用可能な操作や、簡潔なコールバックを実現できます。

よくある質問

「ラムダと高階関数」レッスンは無料ですか?

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

「ラムダと高階関数」で何を学びますか?

振る舞いを値として渡します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ラムダと高階関数」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. リストと可変リスト
  2. マップとセット
  3. map、filter、forEach
  4. ラムダと高階関数
← Android Academyに戻る