高階関数

Kotlinにおける**高階関数(High-order Function)**とは、関数を引数として受け取ったり、関数を戻り値として返す関数のことを指します。関数が第一級市民(first-class citizen)であるKotlinにおいては、高階関数は関数型プログラミングを実現するための基本的な機能です。


1. 高階関数の定義

高階関数は、以下のような形で定義されます:

kotlin
fun <T> myFilter(list: List<T>, predicate: (T) -> Boolean): List<T> { val result = mutableListOf<T>() for (item in list) { if (predicate(item)) { result.add(item) } } return result }

この関数 myFilter は、

  • list: フィルタ対象のリスト

  • predicate: 要素を評価する関数 (T) -> Boolean

を引数として受け取ります。


2. 使用例

高階関数を使って偶数だけを抽出する例です:

kotlin
fun isEven(n: Int): Boolean = n % 2 == 0 fun main() { val numbers = listOf(1, 2, 3, 4, 5, 6) val evenNumbers = myFilter(numbers, ::isEven) println(evenNumbers) // [2, 4, 6] }

または、ラムダ式を直接渡すこともできます:

kotlin
val evenNumbers = myFilter(numbers) { it % 2 == 0 }

3. 関数を返す高階関数

関数を戻り値とする例もあります:

kotlin
fun multiplier(factor: Int): (Int) -> Int { return { number -> number * factor } } fun main() { val triple = multiplier(3) println(triple(5)) // 15 }

この場合、multiplier(3)Int -> Int 型の関数(3倍する関数)を返しています。


4. Kotlin 標準ライブラリでの利用例

Kotlinの標準ライブラリには高階関数が多数含まれています。たとえば:

  • map: 各要素に関数を適用

  • filter: 条件に合う要素だけを抽出

  • forEach: 各要素に処理を適用

kotlin
val doubled = listOf(1, 2, 3).map { it * 2 } // [2, 4, 6]

5. 利用上のポイント

  • 高階関数を使うとコードの抽象化再利用性の向上が可能になります。

  • ラムダ式と組み合わせることで、より簡潔に書けます。

  • インライン化(inline 修飾子)を使うことでパフォーマンスを向上させることもできます。


まとめ

高階関数は、

  • 関数を引数として受け取る

  • 関数を戻り値として返す
    という特徴を持ち、Kotlinにおいて柔軟で強力な関数型プログラミングを支える重要な構文です。標準ライブラリにも多く使われており、実践的にも頻繁に登場します。

生成日:2025/05/04