カテゴリ: Kotlin 更新日: 2026/07/12

Kotlinの高階関数とは?関数を引数に渡す基本的な仕組み

Kotlinの高階関数とは?関数を引数に渡す基本的な仕組み
Kotlinの高階関数とは?関数を引数に渡す基本的な仕組み

先生と生徒の会話形式で理解しよう

生徒

「Kotlinの高階関数ってなんですか?名前が難しそうで不安です……」

先生

「高階関数というのは、関数を引数として渡したり、関数を戻り値として返したりできる特別な関数のことです。」

生徒

「関数を関数に渡す……?ちょっと頭が混乱してきました!」

先生

「大丈夫です。ひとつずつ丁寧に説明していくので、Kotlinの高階関数の基本を一緒に理解していきましょう!」

1. 高階関数とは?Kotlinの関数の進化形

1. 高階関数とは?Kotlinの関数の進化形
1. 高階関数とは?Kotlinの関数の進化形

「高階関数(こうかいかんすう)」とは、関数を引数として受け取ったり、関数を戻り値として返せる関数のことです。

「関数を関数に渡す」というと難しく感じるかもしれませんが、実際はとてもシンプルで、処理をひとつの部品として扱える便利な仕組みです。

たとえば、次のように「あとで動かす処理」を受け取って使うことができます。


fun runTask(task: () -> Unit) {
    println("処理をはじめます")
    task()
    println("処理がおわりました")
}

fun main() {
    runTask { println("こんにちは!この部分が引き渡した処理です") }
}

処理をはじめます
こんにちは!この部分が引き渡した処理です
処理がおわりました

このように、高階関数を使うと「実行したい処理だけを後から差し替える」ことができます。決まった流れの中に、やりたい行動だけを渡せるので、同じ形の動作を何度も書かずに済むのが大きなメリットです。

2. 高階関数を使った基本的な書き方

2. 高階関数を使った基本的な書き方
2. 高階関数を使った基本的な書き方

まずは「関数を受け取って実行する」最小の形から確認しましょう。ひとかたまりの処理を箱に入れて渡すイメージです。呼び出し元では流れ(前→実行→後)を決め、具体的に何をするかだけを後から差し替えます。


fun greet(action: () -> Unit) {
    println("関数の前")
    action()                 // 受け取った処理をここで実行
    println("関数の後")
}

fun main() {
    // ① ラムダ式(かっこを省略した末尾ラムダ)
    greet { println("こんにちは!") }

    // ② 複数行の処理を渡すこともできる
    greet {
        println("はじめまして")
        println("高階関数の実行中です")
    }

    // ③ 事前に用意した関数を渡す(関数参照)
    fun sayHello() { println("おはようございます") }
    greet(::sayHello)
}

関数の前
こんにちは!
関数の後
関数の前
はじめまして
高階関数の実行中です
関数の後
関数の前
おはようございます
関数の後

greetactionという処理を受け取り、決められた枠の中(前後のメッセージ)で実行します。ラムダでその場の処理を渡しても、::関数名の形で既存の関数を渡しても動きは同じです。共通の流れは保ったまま、実行したい中身だけを簡単に変えられるのが高階関数の基本です。

3. () -> Unit の意味とは?

3. () -> Unit の意味とは?
3. () -> Unit の意味とは?

() -> Unitは「引数がなく(かっこの中が空)、結果も返さない(戻り値がUnit)」という関数の型を表します。イメージとしては「やることだけをまとめたボタン」で、押しても値は返ってきません。Javaのvoidに近い考え方ですが、KotlinではUnitという明確な型名になっているのがポイントです。

次のサンプルでは、() -> Unit型の処理を受け取り、決められた場所で実行します。引数がないので呼び出すときはかっこだけ(())でOKです。


/** 引数なし・戻り値なしの処理を受け取る関数 */
fun notify(done: () -> Unit) {
    println("開始")
    done()          // ← 引数がないので () だけで実行
    println("終了")
}

fun main() {
    // その場で書いた処理(ラムダ)を渡す
    notify { println("ボタンを押しました") }

    // 既存の関数を渡すことも可能
    fun say() { println("実行中です") }
    notify(::say)

    // 何もしない処理を渡したい場合は {} だけでもOK
    notify { /* 何もしない */ }
}

開始
ボタンを押しました
終了
開始
実行中です
終了
開始
終了

ここでの要点は二つです。① ()が空なので受け取る値はなし、② 戻り値がUnitなので結果は使いません。つまり「決まった位置で副作用(表示やログなど)を実行したい」ときに相性がよい型です。まずはこの「形(かたち)」を見分けられるようになるだけで、高階関数の読み書きがぐっと楽になります。

4. 引数つきの関数を渡す場合

4. 引数つきの関数を渡す場合
4. 引数つきの関数を渡す場合

今度は「値を受け取って、その結果を返す関数」を渡してみましょう。前の章では「何も受け取らず、結果も返さない処理」でしたが、実際のプログラムでは「数を計算したり、文字を加工したり」したい場面がよくあります。

Kotlinでは、引数と戻り値をまとめてひとつの“型”として書けるので、関数も普通の値と同じように扱えます。


fun operate(a: Int, b: Int, action: (Int, Int) -> Int) {
    val result = action(a, b)       // ← 渡された関数に a と b を渡して結果を受け取る
    println("計算結果は $result です")
}

fun main() {
    // ① その場で加算処理を渡す(ラムダ式)
    operate(10, 4) { x, y -> x + y }

    // ② 別の計算(引き算)も簡単に差し替えられる
    operate(10, 4) { x, y -> x - y }

    // ③ 既存の関数を渡すことも可能
    fun multiply(x: Int, y: Int): Int = x * y
    operate(3, 7, ::multiply)
}

計算結果は 14 です
計算結果は 6 です
計算結果は 21 です

actionの型は(Int, Int) -> Intです。「整数を2つ受け取って、整数を返す関数」を意味します。加算や減算だけでなく、掛け算や割り算など、どんな計算でも同じ枠で使えるので、プログラムの再利用がとても楽になります。

値を受け取って返す高階関数を理解できると、より柔軟な処理が書けるようになります。まずは「引数」「戻り値」「関数型」の3つを意識して、少しずつ試してみるのがおすすめです。

5. 関数型の書き方を理解しよう

5. 関数型の書き方を理解しよう
5. 関数型の書き方を理解しよう

Kotlinで関数を引数にする場合、次のような関数型の書き方を使います。

  • () -> Unit:引数なし、戻り値なし
  • (Int) -> String:整数を受け取って文字列を返す
  • (String, String) -> Boolean:文字列2つを受け取って真偽値を返す

このように、関数の引数と戻り値の型を指定することで、関数を他の関数に渡すことができるのです。

6. 高階関数が活きる場面とは?

6. 高階関数が活きる場面とは?
6. 高階関数が活きる場面とは?

Kotlinの高階関数は、次のような場面でとても便利です。

  • 繰り返し処理の中で、「何をするか」を自由に変えたいとき
  • 似たような処理だけど、ちょっとだけ違うとき
  • 再利用性の高い処理を作りたいとき

たとえば、「あいさつの内容」を変えるだけで、あとは同じ処理を使いまわすことができます。

7. Kotlinの標準ライブラリにも高階関数がたくさん!

7. Kotlinの標準ライブラリにも高階関数がたくさん!
7. Kotlinの標準ライブラリにも高階関数がたくさん!

Kotlinの標準関数にも高階関数がたくさん使われています。たとえば:

  • forEach:リストの各要素に対して処理を行う
  • filter:条件に合うものだけを取り出す
  • map:各要素を別の値に変換する

これらはすべて、「関数を引数にする」ことで動きを変えることができます。

8. 初心者向けの覚え方のコツ

8. 初心者向けの覚え方のコツ
8. 初心者向けの覚え方のコツ

最初は「関数を関数に渡す」なんて難しく感じるかもしれません。でも、ラムダ式や関数型を少しずつ練習すれば、自然と慣れてきます。

  • まずは() -> Unitの形から練習
  • 慣れてきたら、引数つきの関数型に挑戦
  • 高階関数を使って、自分だけの便利な関数を作ってみる

Kotlinの関数は「データのように扱える」ことで、プログラムの自由度が大きく広がります。

まとめ

まとめ
まとめ

Kotlinにおける「高階関数」は、関数を引数や戻り値として扱える高度な機能であり、関数型プログラミングの本質を理解するうえで非常に重要な概念です。本記事では、まず高階関数の定義とその役割を丁寧に説明し、() -> Unit のような関数型の表現や、ラムダ式を引数として渡す方法についても具体的なサンプルコードを通して学びました。
Kotlinでは、関数を「値」として扱えるため、プログラムの設計や構造に柔軟性を持たせることができます。特に、処理の一部を別の関数として渡すことで、共通化・抽象化・再利用性の高いロジックを構築することが可能となります。
高階関数を使いこなすことで、forEachmapfilter などの標準ライブラリに用意された関数と連携しやすくなり、よりモダンでシンプルなKotlinコードを書くことができるようになります。

補足:高階関数の応用例

下記の例は、処理内容を引数として渡して、複数の振る舞いを簡単に切り替えられる高階関数の応用例です。


fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
    return operation(a, b)
}

fun main() {
    val add = calculate(10, 5) { x, y -> x + y }
    val subtract = calculate(10, 5) { x, y -> x - y }
    val multiply = calculate(10, 5) { x, y -> x * y }

    println("加算: $add")
    println("減算: $subtract")
    println("乗算: $multiply")
}

このように、処理をラムダ式で渡すことで、1つの関数で複数の挙動を実現できます。Kotlinの高階関数を活用することで、柔軟で読みやすいコードを書く力が身につきます。

先生と生徒の振り返り会話

生徒

「高階関数って最初は難しそうだったけど、関数を引数に渡せるって考え方がすごく面白いですね!」

先生

「そうですね。Kotlinの関数型プログラミングの魅力が詰まった機能です。使いこなすことで、コードがシンプルかつ再利用しやすくなりますよ。」

生徒

「ラムダ式も少しずつ慣れてきたので、forEachやmap、filterなどの標準関数も活用していきたいです!」

先生

「それは素晴らしい目標です。最初は() -> Unitのようなシンプルな型から慣れていくと、高階関数の魅力をどんどん感じられますよ。」

生徒

「はい!これからもっとKotlinの関数型の書き方に挑戦していきます!」

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Kotlinの高階関数とは何ですか?初心者でも簡単に理解できますか?

Kotlinの高階関数とは、関数を引数として受け取ったり、関数を戻り値として返すことができる特別な関数のことです。初心者でも基本から学べば理解できます。

Kotlinの高階関数で関数を引数に渡すと何が便利なんですか?

処理の内容を関数として渡すことで、処理の一部を変更しながら同じ構造のコードを再利用できるようになり、柔軟で効率的な設計が可能になります。

() -> Unit の意味がよくわかりません。どういう関数を表しているのですか?

() -> Unit は、引数がなくて戻り値もない関数の型を表します。Kotlinではこうした関数型を使って関数を引数として渡します。
関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のswitchで複雑な条件分岐を整理するテクニック
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Go言語
Go言語のスライスを引数に渡す際の注意点!値渡しと参照渡しをわかりやすく解説
New4
Go言語
Go言語の構造体タグ(jsonタグなど)の使い方と活用例を初心者向けにやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Swift
Swift StoryboardとAuto Layout|レスポンシブUIの作り方
No.3
Java&Spring記事人気No3
C#
C#の歴史とは?初心者向けに誕生理由と進化の流れをわかりやすく解説
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.6
Java&Spring記事人気No6
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swiftのcontinue・breakの使い方と注意点を徹底解説!初心者向け制御構文ガイド
No.8
Java&Spring記事人気No8
C#
C#の開発環境構築を完全ガイド!初心者でもわかる.NET SDKのインストール方法

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク