カテゴリ: Kotlin 更新日: 2026/02/11

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は、「引数なし・戻り値なしの関数型」を表します。つまり、「何も受け取らず、何も返さない関数」を意味しています。

高階関数を使うには、こうした「関数の型」をしっかり書くことが必要です。

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

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

次は、引数を持つ関数を引数として渡す場合の例です。


fun operate(a: Int, b: Int, action: (Int, Int) -> Int) {
    val result = action(a, b)
    println("結果は $result です")
}

fun main() {
    operate(5, 3) { x, y -> x + y }
}

結果は 8 です

actionは「整数を2つ受け取って、整数を返す関数」です。中身にはラムダ式を使って、たし算の処理を渡しています。

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の高階関数で関数を引数に渡すと何が便利なんですか?

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

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

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

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

具体的な体験内容と環境

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

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

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

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

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

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

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

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

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

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

セミナー画像

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

関連記事:
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinのログ出力方法を完全ガイド!LogcatとTimberでトラブルシューティング