ラムダと高階関数
振る舞いを値として渡します。
「ラムダと高階関数」は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フィードバックを取得できます。ローカル設定は不要です。